Sobes.tech
Middle

Чӣ гуна муоширати маълумотҳо байни Redux ва компонент дар React сурат мегирад?

sobes.tech AI

Ҷавоб аз AI

Интераксията се осъществява чрез три основни механизма: connect, useSelector и useDispatch.

  1. connect (за класови компоненти, но може да се използва и с функционални): Свързва React компонента с хранилището Redux. Приема две функции: mapStateToProps и mapDispatchToProps.

    • mapStateToProps(state, ownProps): Получава състоянието от Store и пропсите на компонента, връща обект с данни от състоянието, които ще бъдат достъпни чрез пропс.
    • mapDispatchToProps(dispatch, ownProps): Получава функцията dispatch и пропсите на компонента, връща обект с функции-акшъни, които ще бъдат достъпни чрез пропс за изпращане на действия към Store.
    • Стойността, която връща connect — е функция от по-висок ред, която обвива компонента.
    // Фрагмент от код
    import { connect } from 'react-redux';
    
    const mapStateToProps = (state) => ({
      count: state.counter.count
    });
    
    const mapDispatchToProps = (dispatch) => ({
      increment: () => dispatch({ type: 'INCREMENT' })
    });
    
    const MyComponent = ({ count, increment }) => (
      <div>
        <p>{count}</p>
        <button onClick={increment}>Increment</button>
      </div>
    );
    
    export default connect(mapStateToProps, mapDispatchToProps)(MyComponent);
    
  2. useSelector (hook за функционални компоненти): Позволява извличане на данни от състоянието на Redux Store. Приема функция-селектор, която получава текущото състояние на Redux като аргумент и връща желания фрагмент от данни.

    // Фрагмент от код
    import { useSelector } from 'react-redux';
    
    const MyFunctionalComponent = () => {
      const count = useSelector(state => state.counter.count);
    
      return (
        <div>
          <p>{count}</p>
        </div>
      );
    };
    
  3. useDispatch (hook за функционални компоненти): Връща препратка към функцията dispatch от Redux Store. Използва се за изпращане (dispatching) на действия към Store.

    // Фрагмент от код
    import { useDispatch } from 'react-redux';
    
    const MyFunctionalComponent = () => {
      const dispatch = useDispatch();
    
      const handleIncrement = () => {
        dispatch({ type: 'INCREMENT' });
      };
    
      return (
        <button onClick={handleIncrement}>Increment</button>
      );
    };
    

В крайна сметка, данните от Redux (получени чрез connect или useSelector) стават достъпни в компонента като пропсове или променливи, а функциите за промяна на състоянието (передани чрез connect или useDispatch) се използват за изпращане на действия, които се обработват от редукторите и актуализират състоянието на Store. При промяна на съответната част от състоянието, свързаният компонент автоматично се пререндерира с новите данни.