我有一个调用handleApplyFiltersButtonClick的按钮,该按钮通过将过滤器应用于某些数据来更新状态。我在某处有一个错误。我正在努力调试使用Immers生产的状态,因为一切都是代理或函数。我宁愿不使用Immer,但这是车队的选择。
从文档看来,生产者函数通常采用当前状态,并且将参数草稿传递给此函数,然后进行状态更改并记录下来……虽然这里没有这样做。
如何查看更新后的状态?由于console.log('nextState',nextState)导致仅一个没有信息的函数。
handleApplyFiltersButtonClick = () => {
const nextState = produce((state) => {
state.page = 1;
state.appliedFilters = { ...state.filters };
state.filteredHealthProviders = this.getFilteredHealthProviders(state.healthProviders, state.appliedFilters)
})
console.log('nextState', nextState)
this.setState(
nextState,
);
};
答案 0 :(得分:1)
当您将函数传递为produce
的第一个参数时,会创建一个生产者,该函数会创建一个草稿传递给它,并将草稿传递给您的produce
回调。
如果您关心返回值,则需要使用传递给setState
的函数来包装生产者。
handleApplyFiltersButtonClick = () => {
const producer = produce((state) => {
state.page = 1;
state.appliedFilters = { ...state.filters };
state.filteredHealthProviders = this.getFilteredHealthProviders(state.healthProviders, state.appliedFilters);
})
this.setState(
state => {
const nextState = producer(state);
console.log('nextState', nextState);
},
);
};