首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >本机反应:警告:无法在现有状态转换期间进行更新

本机反应:警告:无法在现有状态转换期间进行更新
EN

Stack Overflow用户
提问于 2019-05-13 14:32:08
回答 2查看 206关注 0票数 1

我正在获取数据,然后将它们保存在移动平台上的sqlite文件中。当调用此屏幕时,componentDidMount()函数将开始调用获取代码。当提取结束时,就会有一个setState()调用componenDidUpdate()函数(将数据保存在sqlite中,然后保存在setState= 'isLoadingDataProgramadas: false'中),所以我希望应用程序能够使用React NavigationV3向'ActProgramadas'屏幕转换。下面的解决方案有效,但我得到了一个警告:

警告:无法在现有状态下更新(例如在“呈现”中)。呈现方法应该是道具和状态的纯函数。

我怎么才能解决呢?

代码语言:javascript
复制
componentDidMount() {
    this.doFetch();
 }

componentDidUpdate(){
    this.openBD();
    this.insertSQLITE();
}
 componentWillUnmount() {
    this.closeDatabase();
 }

 render() {
    if(this.state.isLoadingDataProgramadas)
      return (
          <View style={stylesLoading.container}>
              <View>
                  <ActivityIndicator size="large" color="lightblue"/>
              </View>

              <View>
                  <Text style={stylesLoading.texto}>
                  Descargando datos... 
                  </Text>
              </View>
          </View>
      );
    else
      return( 
         <View>
           {this.props.navigation.navigate('ActProgramadas')}
         </View>

      );
  }
EN

回答 2

Stack Overflow用户

发布于 2019-05-13 14:43:40

  1. 它看起来像是if else语句中的一个错误。
  2. 然后尝试像这样绑定导航事件处理程序,或者在构造函数中这样做。

试试这个:

代码语言:javascript
复制
render() {
    if(this.state.isLoadingDataProgramadas) {
      return (
          <View style={stylesLoading.container}>
              <View>
                  <ActivityIndicator size="large" color="lightblue"/>
              </View>

              <View>
                  <Text style={stylesLoading.texto}>
                  Descargando datos... 
                  </Text>
              </View>
          </View>
      );
      } else {
      return( 
         <View>
           {() => this.props.navigation.navigate('ActProgramadas')}
         </View>

      );
      }
  }
票数 0
EN

Stack Overflow用户

发布于 2019-05-13 14:49:24

可能是navigation.navigate在幕后使用,这是一个setState函数。我的建议是创建一个函数,将导航封装到这样的setTimeout函数中。

代码语言:javascript
复制
navigate = () => {
    const { navigation } = this.props
    setTimeout(() => {
        navigation.navigate('ActProgramadas')
    }, 1000);
}

...

<View>
    {this.navigate()}
</View>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/56114522

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档