是否可以在切片减速器中重新分配整个状态(使用 Redux ToolKit)?

Asa*_*son 3 redux react-redux redux-toolkit

我正在使用 Redux Toolkit 的createSlice(). 并尝试创建一个减速器,将外部源的数据填充到 redux 状态。我试图通过在操作负载中传入一个对象来更新整个状态:

.
    reducers: {
        populateData: (state, action) => {
            state = action.payload
        }
.
Run Code Online (Sandbox Code Playgroud)

但只有当我为每个对象键创建一个减速器时它才会起作用。有没有办法一次性完成这一切?

mar*_*son 6

这是一个常见的误解,实际上我昨天刚刚写了一个新的“使用 Immer 编写减速器”文档页面来回答这个问题。引用一下:

一个常见的错误是尝试分配state = someValue directly. 这是行不通的!这仅将局部状态变量指向不同的引用。这既不会改变内存中现有的状态对象/数组,也不会返回全新的值,因此 Immer 不会进行任何实际更改。

相反,您需要:return action.payload,它将完全替换现有状态。