Sobes.tech
Middle

Hogyan történik az adatok kölcsönhatása a Redux és a React komponens között?

sobes.tech MI

Válasz az MI-től

A kölcsönhatás három fő mechanizmuson keresztül valósul meg: connect, useSelector és useDispatch.

  1. connect (osztály komponensekhez, de funkcionális komponensekkel is használható): Kapcsolja a React komponenst a Redux tárolóhoz. Két függvényt fogad: mapStateToProps és mapDispatchToProps.

    • mapStateToProps(state, ownProps): Lekéri az állapotot a Store-ból és a komponens propsait, visszaadva egy objektumot az állapot adataival, amelyek elérhetők a propsokon keresztül.
    • mapDispatchToProps(dispatch, ownProps): Fogadja a dispatch függvényt és a komponens propsait, visszaadva egy objektumot az akciófüggvényekkel, amelyek elérhetők a propsokon keresztül az akciók küldéséhez a Store-ba.
    • A connect által visszaadott érték egy felső szintű függvény, amely becsomagolja a komponenst.
    // Kódrészlet
    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}>Növel</button>
      </div>
    );
    
    export default connect(mapStateToProps, mapDispatchToProps)(MyComponent);
    
  2. useSelector (hook funkcionális komponensekhez): Lehetővé teszi adatok kinyerését a Redux Store állapotából. Egy szelektor függvényt fogad, amely a jelenlegi Redux állapotot kapja argumentumként, és visszaadja a kívánt adatrészt.

    // Kódrészlet
    import { useSelector } from 'react-redux';
    
    const MyFunctionalComponent = () => {
      const count = useSelector(state => state.counter.count);
    
      return (
        <div>
          <p>{count}</p>
        </div>
      );
    };
    
  3. useDispatch (hook funkcionális komponensekhez): Visszaad egy hivatkozást a Redux Store dispatch függvényére. Az akciók küldésére (dispatch) használják.

    // Kódrészlet
    import { useDispatch } from 'react-redux';
    
    const MyFunctionalComponent = () => {
      const dispatch = useDispatch();
    
      const handleIncrement = () => {
        dispatch({ type: 'INCREMENT' });
      };
    
      return (
        <button onClick={handleIncrement}>Növel</button>
      );
    };
    

Összefoglalva, a Redux-ból származó adatok (a connect vagy useSelector segítségével) elérhetők a komponensben props vagy változók formájában, és a státusz módosítására szolgáló funkciók (amelyeket a connect vagy useDispatch segítségével adnak át) az akciók küldésére használhatók, amelyeket a redukálók dolgoznak fel, és frissítik a Store állapotát. Amikor a megfelelő állapot rész változik, a kapcsolódó komponens automatikusan újrarenderelődik az új adatokkal.