Редьюсер и action в Redux

На прошлом уроке мы закончили форму для добавления продукта и выведи ее на главной странице. Но пока добавленные данные не сохраняются, другими словами новый продукт не добавляется к существующим в store. Давайте это исправим.

Для начала в нашем приложении с продуктами мы откроем файл productsSlice.jsx и напишем в свойстве reducer для createSlice функцию productAdded, которая будет заниматься добавлением продукта в store на основе переданных ей текущего стейта и экшена. Нужно отметить, что здесь нам передается не весь state, а только та его часть, которая отвечает за продукты (слайс products знает только о ней). Объект с новым продуктом будет находится в свойстве payload объекта action, который будет генерироваться обработчиком при нажатии кнопки сохранения в форме. В результате редьюсер productAdded будет выглядеть в коде createSlice так:

const productsSlice = createSlice({ name: 'products', initialState, reducers: { productAdded(state, action) { state.push(action.payload) }, }, })

А как насчет action? В самом начале учебника мы упоминали о том, что action - это некоторое событие, представленное в виде объекта, описывающее то, что произошло в приложении. Говорили мы и о том, что можно использовать функцию action creator, которая будет нам создавать такой объект, к примеру так:

const addProduct = newProduct => { return { type: 'products/productAdded', payload: newProduct } }

Хорошая новость в том, что нам не нужно ничего делать, а это за нас сделает функция createSlice, которую мы используем. Как только мы написали reducer, она автоматически создаст за нас action creator с таким же именем. Нам только остается экспортировать полученный action creator для дальнейшего применения в компонентах. Сделаем это в конце файла перед экспортом редьюсера, вот так:

export const { productAdded } = productsSlice.actions export default productsSlice.reducer

Откройте ваше приложение со студентами, а затем файл studentsSlice.jsx, допишите значение поля reducer для createSlice, как показано в уроке.

Добавьте в конец файла studentsSlice.jsx экспорт полученной функции action creator.



Чат с GPT Компилятор