如何在componentDidMount上更改React Native中的状态?

时间:2016-07-03 15:41:40

标签: react-native

我有以下警告:警告:setState(...):只能更新已安装或安装的组件。这通常意味着您在已卸载的组件上调用了setState()。这是一个无操作。请检查Home组件的代码。

export default class Home extends Component {
  constructor(props) {
    super(props);
    this.state = {
      loaded: false,
      failed: false
    };
  }
  componentWillMount() {
    Actions.auth();
  }
  componentDidMount() {
    Actions.loadUser.completed.listen(this.onLoadUserCompleted.bind(this));
    Actions.goHome.listen(this.onGoHome.bind(this));
    Actions.logout.listen(this.onLogout.bind(this));
  }
  onLoadUserCompleted(user) {
    let currentUser = DataStore.getCurrentUser();
    this.setState ({ loaded: true }); // <=============
  }
}

1 个答案:

答案 0 :(得分:0)

componentDidMount()可以使用setState更改状态。我们的代码中有很多这样的东西,请看下面的例子。我猜另一个setState()调用会引起这个警告,可能在另一个视图/组件中? (或者您的组件因某种原因意外卸载)

  constructor(props) {
    super(props);

    this.state = {
      runAfterInteractions: false,
    };
  }

  componentDidMount() {
    InteractionManager.runAfterInteractions(() => {
      this.setState({
        runAfterInteractions: true,
      });
    });
  }

  render() {

    if(!this.state.runAfterInteractions) return null;
    ....