#redux-toolkit
#redux-инструментарий
Вопрос:
Спасибо. Просто хочу уточнить, можем ли мы его использовать? Я думаю, мы можем просто хотеть быть уверенными на 100%
https://codesandbox.io/s/redux-toolkit-state-new-array-4sswi?file=/src/redux/slices/slice.js:111-425
const someSlice = createSlice({
name: "someSlice",
initialState: {
users: [],
status: ""
},
reducers: {
actionSuccess: (state, { payload }) => {
state.users = payload.users;
},
actionFailure: (state) => {
// can we use here function?
statusHandler(state)
}
}
});
Ответ №1:
Редуктор не должен вызывать никаких побочных эффектов. То есть он не должен делать ничего, кроме изменения содержимого состояния. Таким образом, вы не должны вызывать a statusHandler
, который вызвал бы внешние эффекты.
Если ваша statusHandler
функция ничего не делает, кроме обновления состояния, это, похоже, работает в моем тестировании, и я не знаю ни одной причины, по которой это не должно быть хорошо.
Инструментарий Redux использует Immer за кулисами для обработки неизменяемых обновлений, поэтому этот вопрос в основном сводится к тому, эквивалентны ли эти две функции updatedInline
и updatedExternally
. Насколько я могу судить, они есть.
const {produce} = immer;
const initialState = {
status: ''
};
const updatedInline = produce( initialState, draft => {
draft.status = 'failed';
})
const mutateStatus = (state) => {
state.status = 'failed';
}
const updatedExternally = produce( initialState, mutateStatus )
console.log("Updated Inline: n", updatedInline);
console.log("Updated Externally: n", updatedExternally);
<script src="https://cdn.jsdelivr.net/npm/immer@8.0.1/dist/immer.umd.production.min.js"></script>