为什么我不能在组件的构造函数中设置状态?

时间:2017-06-18 20:38:07

标签: reactjs ecmascript-6

我的整个代码中只有一个this.setState来电,并且在构造函数中,但我收到setState错误。

为了清楚起见,我已将其缩减为以下代码:

import React, { Component } from 'react';

class App extends Component {
  constructor() {
    super();
    this.setState({
       hello: 'nothing'
    });
  }

  render() {
    return (
      <div></div>
    );
  }
}

export default App;

错误如下: Image

  

proxyConsole.js:56警告:setState(...):只能更新已安装或安装的组件。这通常意味着您在未安装的组件上调用了setState()。这是一个无操作。请检查App组件的代码。

为什么会发生这种情况?如何在构造函数中设置状态?

1 个答案:

答案 0 :(得分:6)

在构建组件时设置初始状态时,请直接设置this.state,不要使用this.setStatesetState只能在组件已挂载时使用,并且在构造函数中组件已已挂载 - 因此直接设置状态。每the React documentation

  

<强> constructor()

     

constructor(props)

     

在安装之前调用React组件的构造函数。 [...]

     

构造函数是初始化状态的正确位置。如果您没有初始化状态而且没有绑定方法,则不需要为React组件实现构造函数。

constructor() {
  super();
  this.state = {
   hello: 'nothing'
  };
}

the React documentation

  

您可以指定this.state的唯一位置是构造函数。