javascript - React this.state 误解

标签 javascript reactjs

官方例子Timer组件使用this.interval

var Timer = React.createClass({
  getInitialState: function() {
    return {secondsElapsed: 0};
  },

  interval: null,

  tick: function() {
    this.setState({secondsElapsed: this.state.secondsElapsed + 1});
  },
  componentDidMount: function() {
    this.interval = setInterval(this.tick, 1000);
  },
  componentWillUnmount: function() {
    clearInterval(this.interval);
  },
  render: function() {
    return (
      <div>Seconds Elapsed: {this.state.secondsElapsed}</div>
    );
  }
});

React.renderComponent(<Timer />, mountNode);

但为什么不使用 this.state.interval?

或者为什么不

tick: function(){
   this.secondsElapsed++;
   this.forceUpdate(); 
}

如果我可以只使用 this.myPrivateState 为什么需要 this.state.myPrivateState

最佳答案

更改为 state 会导致重新渲染组件。

componentWillUnmount生命周期回调中可以看到interval被清除了。 为什么要在 state 中设置 interval,如果您需要在组件要 umnount(将被删除)时清除它?

将那些在组件发生变化时应该触发重新渲染的东西放入 state

forceUpdate 方法之所以存在,是因为有时您可以知道组件应该再次渲染,但您并没有改变状态,所以您必须显式调用 forceUpdate 方法告诉 React 它应该重新渲染组件。

关于javascript - React this.state 误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25862814/

相关文章:

javascript - PrimeFaces 页面 "hangs"包含 JS "document.write"的元素更新

javascript - JS相当于Java的Collections.unmodifiableCollection

javascript - 传单-可能捕获应用程序引发的异常

reactjs - 将 Flask 服务器添加到 create-react-app 默认应用程序,/dist/bundle.js 上的 404

reactjs - .htaccess - 两个 React 应用程序之间的重定向

javascript - 如何使用输入组件数组中的输入值创建数组?

javascript - 实现将 iframe 切换到全页屏幕并返回小屏幕的更好方法?

javascript - 如何使 children 不在ag网格中重复( Angular )

javascript - React - 加载图像时状态错误

javascript - 使用重新选择有条件地组成选择器