如何避免componentWillMount中的SetState

时间:2017-07-24 13:03:30

标签: reactjs react-native setstate

我有一个欢迎屏幕,我想只向用户展示一次。它的工作原理我使用AsyncStorage来保存令牌。它改变了ShowWelcomeSlides的状态,所以我可以创造一个条件。但是我有一条错误信息。如果不是在componentWillMount中,我真的不知道我可以在哪里更新状态。有什么想法吗?

警告:只能更新已安装或安装的组件。这通常意味着您在已卸载的组件上调用了setState,replaceState或forceUpdate。这是一个无操作。

  componentWillMount() {
    this._renderWelcomeSlidesWithAsyncStorage().done();
  }

  _renderWelcomeSlidesWithAsyncStorage = async () => {
    let value = await AsyncStorage.getItem('AlreadyVisited');

            if (value==='true'){
              this.setState({ShowWelcomeSlides: 'false'});
              console.log('token is present')
            }else{
              this.setState({ShowWelcomeSlides: 'true'});
              console.log('token is not present');
              this._setValue();
            }
        }; 

      onSlidesComplete = () => {
        this.props.navigation.navigate('Home');
      }

  render(){

    if (this.state.ShowWelcomeSlides==='true'){
        return(
        <Slides data={SLIDE_DATA} onComplete={this.onSlidesComplete} />
      );
    }return(
     <SkipWelcome />
    );

1 个答案:

答案 0 :(得分:0)

我认为警告是使用componentWillMount。您应该在componentDidMount中调用_renderWelcomeSlidesWithAsyncStorage以确定您的应用已挂载。