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.
-
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:
mapStateToPropsemapDispatchToProps.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çãodispatche 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); -
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> ); }; -
useDispatch (hook para componentes funcionais): Retorna uma referência à função
dispatchdo 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.