Какова цель файла действий в Redux?

#redux #action

#redux #Экшен

Вопрос:

У меня большая проблема с пониманием redux. Хуже всего, я должен использовать его с vanillia js, но сначала я должен понять элементы redux. И хорошо, я понимаю редуктор. Есть состояния и функции. Но действие? Есть только название возможных действий, таких как:

 const ADD = 'ADD'

export function add(number) {
  return { type: ADD, number}
}
  

И только то, что мне дано, чтобы затем в switch / case в reducer, который я добавил, я запустил некоторую функцию (из reducer). И я не понимаю, что на самом деле должна делать эта функция add. У меня есть функции в reducer, так зачем мне что-то, что возвращает мне тип и число? Даже если у меня много функций, action дает мне только больше имен, переменных и функций, а в итоге большой беспорядок и проблемы с поиском чего-либо. И redux должен дать что-то противоположное.

И я действительно понимаю, что проблема в том, что я чего-то не понимаю, и если я это понимаю, redux должен дать мне четкое и понятное глобальное хранилище.

Итак, пожалуйста, кто-нибудь может мне помочь с этим?

Ответ №1:

То, о чем вы говорите, называется «Создатели действий«.

Они не являются строго обязательными. Вы можете dispatch напрямую вызывать like dispatch({ type: ADD, number}) . Но большинство людей предпочитают использовать создателей действий, чтобы они могли вызывать dispatch(add(number)) . Он добавляет уровень абстракции, чтобы вы могли вызывать действие без необходимости знать, как структурирован базовый объект действия. И это упрощает ситуацию, если объект действия сложный.

«Действие» в redux — это объект, который имеет type свойство, а также содержит всю другую информацию, необходимую редуктору для выполнения действия. В вашем случае дополнительная информация — это просто a number , но она может быть более сложной.

Это ваше действие:

 { type: ADD, number}
  

Создатель действия — это функция, которая принимает некоторые аргументы и использует эти аргументы для создания объекта действия.

Это ваш создатель действий:

 export function add(number) {
  return { type: ADD, number}
}
  

Ваш очень простой, но вот пример, чтобы показать вам, как это может быть сложнее.

 export function updateUser(userId, changes) {
    return {
        type: UPDATE_USER,
        payload: {
            id: userId,
            changes,
        },
        meta: {
            timestamp: Date.now(),
        }
    };
}
  

Эта функция не делает ничего, кроме создания действия. Он не обновляет пользователя — это задача редуктора.

Если вы хотите уменьшить количество шаблонов, вы можете рассмотреть возможность использования пакета Redux Toolkit, который упрощает работу, автоматически создавая действия на основе reducer .

Комментарии:

1. хорошо, большое вам спасибо. Это действительно полезно для меня. Я просмотрел много руководств и тоже читал, и мне было интересно, почему иногда нет чего-то вроде action (как я показываю выше), но тип и полезная нагрузка находятся в отправке. Еще раз спасибо