Hoe verloopt de gegevensinteractie tussen Redux en de component in React?
sobes.tech AI
Antwoord van AI
De interactie gebeurt via drie hoofdmechanismen: connect, useSelector en useDispatch.
-
connect (voor klassecomponenten, maar kan ook worden gebruikt met functionele componenten): Verbindt een React-component met de Redux-store. Neemt twee functies:
mapStateToPropsenmapDispatchToProps.mapStateToProps(state, ownProps): Haalt de toestand uit de Store en de props van de component, en geeft een object terug met de gegevens uit de toestand die via props toegankelijk zijn.mapDispatchToProps(dispatch, ownProps): Ontvangt dedispatch-functie en de props van de component, en geeft een object terug met actie-functies die via props toegankelijk zijn om acties naar de Store te sturen.- De waarde die door
connectwordt geretourneerd, is een hogere-orde functie die de component omhult.
// Codefragment 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); -
useSelector (hook voor functionele componenten): Maakt het mogelijk om gegevens uit de Redux Store te halen. Neemt een selector-functie die de huidige Redux-toestand ontvangt als argument en het gewenste gegevensfragment retourneert.
// Codefragment import { useSelector } from 'react-redux'; const MyFunctionalComponent = () => { const count = useSelector(state => state.counter.count); return ( <div> <p>{count}</p> </div> ); }; -
useDispatch (hook voor functionele componenten): Geeft een referentie aan de
dispatch-functie van de Redux Store. Wordt gebruikt om acties te versturen (dispatchen) naar de Store.// Codefragment import { useDispatch } from 'react-redux'; const MyFunctionalComponent = () => { const dispatch = useDispatch(); const handleIncrement = () => { dispatch({ type: 'INCREMENT' }); }; return ( <button onClick={handleIncrement}>Increment</button> ); };
Kort samengevat: gegevens uit Redux (verkregen via connect of useSelector) worden in de component toegankelijk als props of variabelen, en functies om de toestand te wijzigen (doorgegeven via connect of useDispatch) worden gebruikt om acties te versturen, die worden verwerkt door reducers en de toestand van de Store bijwerken. Wanneer het relevante deel van de toestand verandert, wordt de gekoppelde component automatisch opnieuw gerenderd met de nieuwe gegevens.