Sobes.tech
Middle

Como ocorre a interação de dados entre o Redux e o componente no React?

sobes.tech IA

Resposta da IA

A interação ocorre através de três mecanismos principais: connect, useSelector e useDispatch.

  1. connect (para componentes de classe, mas também pode ser usado com componentes funcionais): Liga um componente React ao armazenamento Redux. Aceita duas funções: mapStateToProps e mapDispatchToProps.

    • mapStateToProps(state, ownProps): Obtém o estado do Store e as props do componente, retornando um objeto com os dados do estado acessíveis através das props.
    • mapDispatchToProps(dispatch, ownProps): Recebe a função dispatch e as props do componente, retornando um objeto com funções de ação acessíveis através das props para enviar ações ao Store.
    • O valor retornado por connect é uma função de ordem superior que envolve o componente.
    // Fragmento de código
    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}>Incrementar</button>
      </div>
    );
    
    export default connect(mapStateToProps, mapDispatchToProps)(MyComponent);
    
  2. useSelector (hook para componentes funcionais): Permite extrair dados do estado do Redux Store. Aceita uma função seletora que recebe o estado atual do Redux como argumento e retorna o fragmento de dados desejado.

    // Fragmento de código
    import { useSelector } from 'react-redux';
    
    const MyFunctionalComponent = () => {
      const count = useSelector(state => state.counter.count);
    
      return (
        <div>
          <p>{count}</p>
        </div>
      );
    };
    
  3. useDispatch (hook para componentes funcionais): Retorna uma referência à função dispatch do Redux Store. É usado para enviar (dispatch) ações ao Store.

    // Fragmento de código
    import { useDispatch } from 'react-redux';
    
    const MyFunctionalComponent = () => {
      const dispatch = useDispatch();
    
      const handleIncrement = () => {
        dispatch({ type: 'INCREMENT' });
      };
    
      return (
        <button onClick={handleIncrement}>Incrementar</button>
      );
    };
    

Em resumo, os dados do Redux (obtidos através de connect ou useSelector) tornam-se acessíveis no componente como props ou variáveis, e as funções para alterar o estado (passadas através de connect ou useDispatch) são usadas para enviar ações, que são processadas pelos reducers e atualizam o estado do Store. Quando a parte correspondente do estado muda, o componente vinculado é re-renderizado automaticamente com os novos dados.