reactjs - React - 有一个主要的 setState 函数还是多个?

标签 reactjs

我已经用 React 进行开发有一段时间了。当我第一次开始时,我的代码如下所示:

this.state = {
  foo: 1,
  bar: 2,
  baz: 3
};

updateFoo(num) {
  this.setState({ foo: num )};
}

updateBar(num) {
  this.setState({ bar: num )};
}

updateBaz(num) {
  this.setState({ baz: num )};
}

一个单独的函数来更新状态的单独部分。

后来我意识到,嗯,这很多余,让我们改变一下。因此,我没有为每个状态更新使用单独的函数,而是采用了这样的方法:

updateState(key, val) {
  this.setState([key]: val);
}

我已经使用 updateState 进行非常简单的状态更新有一段时间了。我喜欢它,但我意识到我可以更进一步并传递整个更新对象来更新多个状态:

updateManyStates(state) {
  this.setState(state);
}

updateManyStates({ foo: 5, bar: 6, baz: 7 });

编写updateManyStates函数后,我觉得我的代码变得不太清晰。尽管是多余的,但 updateFooupdateBarupdateBaz 等函数清楚地显示了我的代码中发生的情况。 updateManyStates 非常枯燥,但有时我觉得它比其他开发人员更容易理解。想法?

最佳答案

拥有良好命名的方法来对本地组件状态执行特定更新并没有什么问题。实际上,我更喜欢它,因为这些方法通常会传递到下游的其他组件,并使跟踪逻辑变得更容易。

在每个方法中调用 this.setState 与 DRY 的概念几乎没有冲突。

关于reactjs - React - 有一个主要的 setState 函数还是多个?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48574281/

相关文章:

javascript - 在 React 中使用 map() 遍历嵌套的 Prop

javascript - react js : how to draw svg into a canvas that doesn't exist yet?

reactjs - 失败的 Prop 类型 : Invalid prop `children` of type `string` supplied to `DetailField` , 预期 `object`

JSON.stringify() 函数正在用空对象替换文件对象

javascript - 嵌套 react 路由器同级

reactjs - next.js 为 NextJs 设置 ESLint

javascript - ReactJS,在 <img> 标签中呈现 base64 字符串给出错误 ERR_INVALID_URL

javascript - React 组件不是从 bootstrap 选项卡调用的吗?

javascript - 如何使用 React 从 action.js 中的 API 获取响应值

javascript - 如何防止子组件重新渲染?