Sobes.tech
Middle

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.

  1. connect (voor klassecomponenten, maar kan ook worden gebruikt met functionele componenten): Verbindt een React-component met de Redux-store. Neemt twee functies: mapStateToProps en mapDispatchToProps.

    • 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 de dispatch-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 connect wordt 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);
    
  2. 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>
      );
    };
    
  3. 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.