javascript - 如何使用 Immer 调试 UI 状态?

标签 javascript reactjs immer.js

我有一个调用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,
    );
};

最佳答案

当您传递一个函数作为product的第一个参数时,就会创建一个生产者,它是一个创建草稿的函数无论您传递给它什么值,并将该草稿传递给您的 product 回调。

如果您关心返回值,则需要使用传递给 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);
    },
  );
};

关于javascript - 如何使用 Immer 调试 UI 状态?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53199246/

相关文章:

javascript - 在超链接的点击事件上调用javascript函数

javascript - Github - 读取边带数据包时意外断开连接

node.js - ReactJs 每页使用 CSS

javascript - AES 128 解密 : First char of CryptoJS. enc.Latin1 格式错误

javascript - Typescript:使用动态和静态键定义接口(interface)

javascript - 单击按钮返回所有链接

javascript - 如何在等待渲染 Reactjs 时进行加载

reactjs - Immer 是否允许我们在 redux reducer 中存储类实例?

javascript - Immer.js 和 eslint fp/no-mutation

javascript - Vue 中的 Immer 数据未更新