useDispatch()

Dispatch - это метод объекта Store, который используется для отправки actions в Store. Dispatch вызывает reducer, который обновляет state приложения в соответствии с переданным actions.

dispatch можно использовать с помощью хука useDispatch() или с помощью функции connect, которая добавляет dispatch в качестве пропса компонента.

Пример использования useDispatch():

import { useDispatch } from "react-redux"
import { addTodoActionCreator } from "./actions"
 
function TodoForm() {
  const dispatch = useDispatch()
 
  const handleFormSubmit = (e) => {
    e.preventDefault()
    const formData = new FormData(e.target)
    const todoText = formData.get("todoText")
    dispatch(addTodoActionCreator(todoText))
  }
 
  return (
    <form onSubmit={handleFormSubmit}>
      <input type="text" name="todoText" />
      <button type="submit">Add Todo</button>
    </form>
  )
}

Dispatch позволяет обновлять состояние приложения в Redux и является ключевым методом для взаимодействия компонентов React с Redux Store.

actions

Actions - это константы, описывающие событие.

const ACTION_1 = "ACTION_1";

export default ACTION_1;

Action Creator- это функция, которая создает Action. Она принимает данные и возвращает объект Action, который затем передается в Store для обновления состояния приложения.

Action Creators может содержать различные свойства, обязательно должно быть свойство ”type", которое указывает на тип действия, которое нужно выполнить.

Пример Action Creator:

function addTodoActionCreator(id, text) {
  return {
    type: 'ADD_TODO',
    payload: {
      id,
      text
    }
  }
}

В этом примере функция addTodoActionCreator принимает два параметра - id и text, и возвращает объект Action с типом “ADD_TODO” и данными о новой задаче.

Вы можете использовать функцию bindActionCreators() для автоматического привязывания большого количества генераторов экшенов к функции dispatch(). Созданные таким способом функции делают сразу два действия - создание action и отправка action в dispatch().

import { bindActionCreators } from "redux"
import { increment, decrement, reset } from "./actions"
 
// Получаем ссылку на функцию `dispatch` из Redux Store
 
// Пример использования в функциональном компоненте с помощью хука useDispatch()
import { useDispatch } from "react-redux"
 
const MyComponent = () => {
  const dispatch = useDispatch()
 
  // Привязываем генераторы экшенов к функции dispatch
  const actions = bindActionCreators({ increment, decrement, reset }, dispatch)
 
  // Теперь в объекте `actions` у нас есть функции, которые автоматически отправляют экшены в `dispatch()`
  // actions.increment() - отправляет экшен { type: 'INCREMENT' }
  // actions.decrement() - отправляет экшен { type: 'DECREMENT' }
  // actions.reset() - отправляет экшен { type: 'RESET' }
 
  // ...
 
  return <div>Компонент</div>
}

Action Creators позволяют абстрагироваться от создания объекта Action и упрощают процесс управления состоянием. Они также могут использоваться для асинхронных операций, таких как получение данных из API, используя middleware, такой как Redux Thunk или Redux Saga

*Основной принцип заключается в том, что действия и редьюсеры должны быть простыми функциями.


Назад