Вы здесь:

Конспект https://www.geeksforgeeks.org/reactjs/react-redux-hooks-useselector-and-usedispatch/

С useDispatch и useSelector.

  • useSelector - обеспечивает доступ к state
  • useDispatch - позволяет функциональным компонентам отправлять действия в хранилище Redux

Использование:

const counter = useSelector(state => state.counter);

Пример с useDispatch, useSelector:

import React from 'react';
import { useSelector, useDispatch } from 'react-redux';
import { increment } from '../actions/actions'; // import ACTION "increment" ( {type: 'INCREMENT'} )

const Example = () => {
    const counter = useSelector(state => state.counter); // USE_SELECTOR!!! count будет изменяться при обновлении
    const dispatch = useDispatch(); // USE_DISPATCH!!! определение dispatch для отправки action
    ....
    const handleIncrement = () => {
        dispatch(increment()); // DISPATCH ACTION!!!! Отправка action в reducer.
                               // increment() возвращает объект, который называется ACTION.
                               //    export const increment = () => ({ type: actions.INCREMENT });
                               // В ACTION указывается тип действия и, при необходимости, дополнительные данные (payload):
                               // Пример action с параметром (https://github.com/cherepakhin/redux_first_app/blob/master/src/store/actions_task.js):
                               //    export const toggleTask = id => ({
                               //      type: actions.TASK_TOGGLE,
                               //      payload: { id: id } // или так: payload: { id }
                               //    });
    });
    ....
};

 

Усовершентсвованный способ работы с Redux через useState.

Перехватчик useState - это функция, которая позволяет добавлять состояние к функциональному компоненту. Это АЛЬТЕРНАТИВА перехватчику useSelector. С useState так:

  const [counter, setCounter] = useState(0); // USE_STATE!!! 0 - это начальное значение переменной состояния counter.
  const dispatch = useDispatch();
  ....
  const handleTaskTitleChange = (e) => {
    setCounter(e.target.value);
  }
  ....

Полный пример:

import React, { useState } from "react";

function App() {
    const [count, setCount] = useState(0); // useState!!!
    const increment = () => setCount(count + 1);
    const decrement = () => setCount(count - 1);
    
    return (
        <div>
            <h1>Count: {count}</h1> {/* Display the current count */}
            <button onClick={increment}>Increment</button> {/* Increment the count */}
            <button onClick={decrement}>Decrement</button> {/* Decrement the count */}
        </div>
        );
}

export default App;