如何解决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)
}
}
});
解决方法
减速器不应引发任何副作用。也就是说,除了改变状态的内容之外,它不应该做任何事情。因此,您不应调用会触发外部影响的 statusHandler
。
如果您的 statusHandler
函数只更新状态,那么这在我的测试中似乎确实有效,而且我不知道为什么它不正常。
Redux Toolkit 在后台使用 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>
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。