Sobes.tech
Middle

Comment se déroule l'interaction des données entre Redux et le composant dans React?

sobes.tech IA

Réponse de l'IA

L'interaction se fait via trois mécanismes principaux : connect, useSelector et useDispatch.

  1. connect (pour les composants de classe, mais peut aussi être utilisé avec des composants fonctionnels) : Relie un composant React au magasin Redux. Prend deux fonctions : mapStateToProps et mapDispatchToProps.

    • mapStateToProps(state, ownProps): Récupère l'état du Store et les props du composant, renvoyant un objet avec les données de l'état accessibles via les props.
    • mapDispatchToProps(dispatch, ownProps): Reçoit la fonction dispatch et les props du composant, renvoyant un objet avec des fonctions d'action accessibles via les props pour envoyer des actions au Store.
    • La valeur retournée par connect est une fonction d'ordre supérieur qui enveloppe le composant.
    // Fragment de code
    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}>Incrémenter</button>
      </div>
    );
    
    export default connect(mapStateToProps, mapDispatchToProps)(MyComponent);
    
  2. useSelector (hook pour composants fonctionnels) : Permet d'extraire des données de l'état du Store Redux. Prend une fonction sélecteur qui reçoit l'état actuel de Redux en argument et retourne le fragment de données souhaité.

    // Fragment de code
    import { useSelector } from 'react-redux';
    
    const MyFunctionalComponent = () => {
      const count = useSelector(state => state.counter.count);
    
      return (
        <div>
          <p>{count}</p>
        </div>
      );
    };
    
  3. useDispatch (hook pour composants fonctionnels) : Retourne une référence à la fonction dispatch du Store Redux. Utilisé pour envoyer (dispatch) des actions au Store.

    // Fragment de code
    import { useDispatch } from 'react-redux';
    
    const MyFunctionalComponent = () => {
      const dispatch = useDispatch();
    
      const handleIncrement = () => {
        dispatch({ type: 'INCREMENT' });
      };
    
      return (
        <button onClick={handleIncrement}>Incrémenter</button>
      );
    };
    

En résumé, les données de Redux (obtenues via connect ou useSelector) sont accessibles dans le composant sous forme de props ou de variables, et les fonctions pour modifier l'état (passées via connect ou useDispatch) sont utilisées pour envoyer des actions, qui sont traitées par les reducers et mettent à jour l'état du Store. Lorsqu'une partie de l'état change, le composant lié se re-render automatiquement avec les nouvelles données.