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
*Основной принцип заключается в том, что действия и редьюсеры должны быть простыми функциями.