通过 this.state 生产和不生产有什么区别? Immer.js

What is the difference between passing this.state to produce and not? Immer.js

有什么区别:

this.setState(produce((draft) => { draft.name ='name'}

this.setState(produce(this.state, (draft) => { draft.name ='name'}

有人能给我解释一下吗?

在大多数情况下,两者的行为相同

  1. produce((draft) => { draft.name ='name'}) returns 一个用代理包装参数并应用突变的函数。 setState 允许开发者传递一个将以当前状态调用的函数。

  2. produce(this.state, (draft) => { draft.name ='name'}) returns 对第一个参数的 Proxy 应用突变的结果。 setState 允许传递“更新状态”因此它也可以工作。

第一种方法更可取,原因如下

  1. 如果按顺序快速调用,您通常希望下一个状态建立在变异的前一个状态之上(著名的反例)。 setState 的变异函数版本是要走的路。
  2. 输入的字符较少。