代码之家  ›  专栏  ›  技术社区  ›  Nick Lee

如何使用Immer调试UI状态?

  •  0
  • Nick Lee  · 技术社区  · 7 年前

    我有一个按钮调用handleApplyFiltersButtonClick,它通过对一些数据应用过滤器来更新状态。我哪里有个虫子。我正在努力调试使用immer'product的状态,因为一切都是代理或函数。我宁愿不用伊默,但那是球队的选择。

    从文档中可以看出,生产者函数通常采用当前状态,而将参数草稿传递给wehre的函数会进行状态更改并记录下来。。。不过,在这里不要这样做。

    如何查看更新的状态?因为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,
        );
    };
    
    1 回复  |  直到 7 年前
        1
  •  2
  •   aleclarson    7 年前

    当您传递一个函数作为 produce A. 制作人 草案 不管你把什么价值传递给它,把草稿传递给你的朋友 生产 回拨。

    如果您关心返回值,则需要用传递给的函数包装生产者 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);
        },
      );
    };