【问题标题】:Easy-peasy - unable to return new stateEasy-peasy - 无法返回新状态
【发布时间】:2019-10-31 21:41:07
【问题描述】:

为什么我不能以这种方式返回新状态(重置操作)?

export interface TodosModel {
  items: string[];
  reset: Action<TodosModel>;
}

const todos: TodosModel = {
  items: [],

  // This action does not update the state
  reset: action(() => {
    return {
      items: []
    };
  })
};

我正在努力实现这里描述的内容:https://github.com/ctrlplusb/easy-peasy/issues/146

工作示例:https://codesandbox.io/s/easy-peasy-typescript-v3-vzc11

【问题讨论】:

标签: reactjs typescript redux easy-peasy


【解决方案1】:

为什么它不起作用有两个问题。

您没有正确地将点击操作绑定到重置

<button onClick={() => reset()}>Reset</button>

回调传入你修改状态的状态,生命周期更新动作内部的状态。

reset: action(state => {
    state.items = [];
  })

这是一份工作副本。 https://codesandbox.io/s/easy-peasy-typescript-v3-4j9c6

【讨论】:

  • 1. () =&gt; reset()reset 在这种情况下它的工作原理相同 2. 问题是,为什么我不能像本例一样返回整个 stategithub.com/ctrlplusb/easy-peasy/issues/146
  • @Adee 不,如果您不调用该函数,它不会重置是不一样的。您将单击事件函数绑定到 b 传递给可能不同的重置。你必须小心。它不起作用的原因是因为如果您查看类型。库中有一个错误,即使您遵循他们的文档和他们的工作示例,如果您尝试使用扩展运算符返回,它也将不起作用。只有当它直接改变状态时它才有效。他们也更喜欢改变状态,因为这是你在 actions 函数中的“reducer”部分。
  • @Adee 我不知道他们在他们的库中做了什么魔法,但是如果你打印状态参数的控制台日志,它是未定义的,但如果你 JSON.stringify(state) 它显然就在那里.
猜你喜欢
  • 1970-01-01
  • 2021-06-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多