【问题标题】:How to avoid SetState in componentWillMount如何在 componentWillMount 中避免 SetState
【发布时间】:2017-12-30 02:05:17
【问题描述】:

我有一个欢迎屏幕,我只想向用户显示一次。它工作我使用 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 />
    );

【问题讨论】:

  • 异步就可以了
  • 好的,我可以继续使用该应用程序,不会造成问题?
  • 根据我的经验,当您的异步方法完成并且正在卸载组件时会出现此警告。这可能是一个难以追踪的情况,因为从 UI 的角度来看,似乎一切正常。我会检查您的流程并确保组件没有在某处安装和卸载。

标签: reactjs react-native setstate


【解决方案1】:

我相信警告是针对 componentWillMount 的使用。您应该在 componentDidMount 中调用 _renderWelcomeSlidesWithAsyncStorage 以确保您的应用已安装。

【讨论】:

  • 使用componentDidMount,警告仍然存在。你认为这对 App Store 来说会是个问题吗?
  • 你确定吗?也许你在你的应用安装之前设置了它的状态。sn-p 完成了吗?
  • 这是做什么的。 _setValue 做什么?可能在组件卸载后调用。
  • _setValue = async () =&gt; { await AsyncStorage.setItem('AlreadyVisited', 'true'); };
  • 如果令牌尚不存在,则存储令牌
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2019-08-14
  • 2019-12-29
  • 2023-04-05
  • 2019-11-21
  • 1970-01-01
  • 2022-12-03
  • 2018-03-18
相关资源
最近更新 更多