为了账号安全,请及时绑定邮箱和手机立即绑定

ReactJS中this.state和this.setstate的区别是什么?

ReactJS中this.state和this.setstate的区别是什么?

梵蒂冈之花 2019-08-28 08:57:35
ReactJS中this.state和this.setstate的区别是什么?我想更改hasSubmit密钥的值,就像在第一个代码部分中一样。我知道这不推荐。但第二个代码是异步的,我不想使用的回调函数setState。是什么的差异this.state和setState?有没有办法hasSubmit立即改变国家价值?第一个代码:this.state.hasSubmit = falsethis.setState({})//Code that will use `hasSubmit`.第二个代码:this.setState({    hasSubmit: false,});//Code that will use `hasSubmit`.加:场景是:hasSubmit设置false在getInitialState()。hasSubmitfalse当我点击submit按钮时会改变。hasSubmit将true在提交时更改为。第一次单击submit没有问题,hasSubmit将被设置为true。但是第二次点击submit将使用错误Second asynchronous code,因为hasSubmit它仍然是true,而First Code可以解决问题。
查看完整描述

3 回答

?
撒科打诨

TA贡献1934条经验 获得超2个赞

以下是React文档所说的内容:

永远不要this.state直接变异,因为之后调用setState()可能会替换你所做的变异。把this.state看作是不可变的。

setState()不会立即改变this.state但会创建一个挂起状态转换。this.state调用此方法后访问可能会返回现有值。

无法保证对setState的调用进行同步操作,并且可以对调用进行批处理以提高性能。 setState()除非实现条件渲染逻辑,否则将始终触发重新渲染shouldComponentUpdate()

如果正在使用可变对象并且无法实现逻辑shouldComponentUpdate(),则setState()仅在新状态与先前状态不同时调用将避免不必要的重新呈现。

以设计方式使用API总是明智的。如果文档说不改变你的状态,那么你最好不要改变你的状态。

虽然setState()技术上可能是异步的,但它肯定不会以任何明显的方式变慢。组件的render()功能将以非常短的顺序调用。

直接设置状态的一个缺点是阵营的生命周期方法- ,,shouldComponentUpdate() -依赖于状态转换被调用。如果直接更改状态并使用空对象调用,则无法再实现这些方法。componentWillUpdate()componentDidUpdate()setState()setState()

另一个是它只是糟糕的编程风格。你在两个陈述中做了你可以做的一个。

而且,这里没有实际的好处。在这两种情况下,render()直到调用setState()(或forceUpdate())之后才会触发。

您声称有必要这样做而不实际解释需要的是什么。也许你想更详细地解决你的问题。可能有更好的解决方案。

最好使用框架而不是框架。

UPDATE

从下面的评论:

需要的是我想在下面使用改变的hasSubmit。

好的我现在明白了。如果您需要立即使用未来的州财产,最好的办法就是将其存储在本地变量中。

const hasSubmit = false;this.setState({
  hasSubmit: hasSubmit});if (hasSubmit) { 
  // Code that will use `hasSubmit` ...


查看完整回答
反对 回复 2019-08-28
?
翻过高山走不出你

TA贡献1875条经验 获得超3个赞

如果要更改状态并通过响应触发重新渲染: 使用第二个代码。

  this.setState({
    hasSubmit: false,
  });

第一个代码的问题/错误:

  this.state.hasSubmit = false      // Updates state directly: 
                                    // You are not supposed to do this
                                    // except in ES6 constructors
  this.setState({})                 // passes an empty state to react.
                                    // Triggers re-render without mutating state


查看完整回答
反对 回复 2019-08-28
  • 3 回答
  • 0 关注
  • 2759 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信