首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >不变违反:App(.)渲染没有返回任何内容。

不变违反:App(.)渲染没有返回任何内容。
EN

Stack Overflow用户
提问于 2018-05-16 06:32:47
回答 3查看 1.7K关注 0票数 1

我试图根据AsyncStorage的承诺来呈现组件,并得到了以下错误:

异常:不变冲突:App(.):render没有返回任何内容。这通常意味着缺少返回语句。或者,若要不呈现任何内容,请返回null。

我知道组件是好的,因为我试着单独呈现每个组件,它们都工作得很好,当我试图通过AsyncStorage.getItem渲染它时,我无法完成它。

代码:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
checkToken = () => {
    AsyncStorage.getItem('user')
        .then((res) => {
            res = JSON.parse(res)
            console.log('this is checkToken()',res.token)
            // this.renderUserSection(res.token);
            return res.token;   
        })
        .then((token) => {
          return (
             <View style={styles.container}> 
                {!token ? this.renderUser() : this.renderApp()} 
             </View>
          )  
        })
        .catch((err) => {
          console.log(err)
        })
}



render() {
    return (
        this.checkToken() 
    ) 
}

当我这么做的时候

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
render() {
    return (
        this.renderUser() 
    ) 
}

效果很好!

也是当我这么做的时候

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
render() {
    return (
        this.renderApp() 
    ) 
}

它也起作用了,所以功能是好的,是逻辑,或者是我无法让它工作的最上面的逻辑。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2018-05-16 06:42:51

AsyncStorage是异步的,所以它不会立即返回您编写的视图。在AsyncStorage检索到数据之前,您需要显示一个旋转器或自定义视图。

这里有一个解决方案:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
constructor() {
    this.state = {
        token: null
    }
    this.checkToken();
}

checkToken = () => {
    AsyncStorage.getItem('user')
    .then((res) => {
      res = JSON.parse(res)
      console.log('this is checkToken()',res.token)
      // this.renderUserSection(res.token);
    })
    .then((token) => {
        this.setState({token: token})  
    })
    .catch((err) => {
      console.log(err)
    })
}

render() {
    if (this.state.token == null) {
       return (<View> {this.renderUser()} </View>)
    }
    else {
        return (
            <View style={styles.container}> 
               {this.renderApp()}
            </View>
        )
    }
}
票数 2
EN

Stack Overflow用户

发布于 2018-05-16 06:42:28

嗯,checkToken是一个函数,它:

  • 调用AsyncStorage
  • 返回未定义

因此,如果日志告诉您渲染不返回任何内容,则日志是正确的!

您应该向您的checkToken添加一个返回语句。

那么我想我们应该进入第2部分,现在检查令牌是一个函数,它:

  • 调用AsyncStorage
  • 返回已执行的函数将被返回的承诺。

它不太管用..。反应呈现组件,而不是承诺!

我的看法是,你需要重构这是如何工作的。我的建议:

  • 将checkToken重构为一个函数,如果getItem成功,则调用setState({ content:})
  • 如果失败,setState({ content: null })
  • 在render函数中,不要返回函数调用。相反,返回state.content
  • 如果要在每次呈现时检查令牌,请在从RENDER返回checkToken之前调用state.content。
  • 如果您只想检查令牌一次,请调用componentDidMount中的componentDidMount-或任何您需要的地方。

这是我认为代码应该是什么样子的示例。您应该考虑一下叫checkToken的最佳位置是什么。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
  checkToken = () => {
    let self = this;
    AsyncStorage.getItem('user')
    .then((res) => {
      res = JSON.parse(res)
      console.log('this is checkToken()',res.token)
      // this.renderUserSection(res.token);
      return res.token;   
    })
    .then((token) => {
      self.setState({
        content: (<View style={styles.container}> 
          {!token ? self.renderUser() : self.renderApp()} 
        </View>)
      });
    })
    .catch((err) => {
      self.setState({ content: null })
      console.log(err)
    })
  }
render() {
  //are you sure you need to call checkToken here? Maybe there's a better place? if there is no shouldComponentUpdate this could cause an infinite re-render loop
  //you could maybe call it for componentDidMount, or some other lifecycle method?
  //otherwise I think you'll need that shouldComponentUpdate implementation.
  this.checkToken();
  return this.state.content;
}
票数 0
EN

Stack Overflow用户

发布于 2018-05-16 06:43:26

请先使用状态来存储令牌。(您拥有的“checkToken”方法是一个空方法)

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
checkToken = () => {
        AsyncStorage.getItem('user')
        .then((res) => {
          res = JSON.parse(res)
          console.log('this is checkToken()',res.token)
          // this.renderUserSection(res.token);
          return res.token;
          this.setState(state => ({
            ...state,
            token : res.token
          }))
        })
        .catch((err) => {
          console.log(err)
        })
      }

      render () {
        const { token } = this.state;
        return (
          <View style={styles.container}> 
              {
                !token 
                  ? this.renderUser() 
                  : this.renderApp()
               } 
          </View>
        )
      }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50373673

复制
相关文章
记录:明明没有任何违规内容却被QQ拦截
个人站长应该都经历过,明明就一个单纯的个人博客,啥内容也没有,备案站,莫名奇妙就被拦截了,我现在几个站,但是另一个站一年多一直没被QQ拦截过,就在昨天,被拦截了,而且是直接变红,一般都是变白,所以我感觉应该是被人举报了。
深白鸭
2023/03/06
1K6
记录:明明没有任何违规内容却被QQ拦截
没有任何基础怎么学PS平面设计?要学哪些内容?
没有任何基础怎么学PS平面设计?学平面设计要学哪些内容?想知道如何设计?然后你应该学习设计的基础知识。设计的基本元素包括色彩、线条、形状、规模、空间、纹理和价值。基本件构成任何一件作品的东西。如果你开始一个设计课程,这将是你的第一件事,你的教导,保证。
上官婉儿
2020/04/17
9160
没有任何基础怎么学PS平面设计?要学哪些内容?
MySQL没有启动成功,没有报告任何错误
问题描述: 在使用"net start mysqld" 的时候出现: MySQL 服务正在启动… MySQL 服务无法启动。
vincentbbli
2021/08/18
3.1K0
用 shell 脚本做 restful api 接口监控
基于历史原因,公司有一个“三无”采集服务——无人员、无运维、无监控——有能力做的部门不想接、接了的部门没能力。于是就一直这样裸奔,直到前几天一个依赖于这个采集服务的大数据分析服务入口流量锐减,才发现居然是这个采集服务出问题了!而且问题不是简单的挂掉,而是这个采集服务给客户端下发的采集策略中,产品列表为空了!当时事出紧急,把所有产品开关挨个打开了一遍,算是临时解决了这个问题。事后复盘这个问题,从问题出现、到问题被感知到、再到问题被临时解决,这中间消耗的时间太长了,在新的采集服务上线之前,需要随时监控老的采集服务的接口状态,一旦有问题就可以立即处理。
海海
2022/08/19
3.1K0
用 shell 脚本做 restful api 接口监控
使用PrerenderSpaPlugin预渲染插件没有成功渲染
问题 在已有vue项目里使用prerender-spa-plugin插件时,遇到了build出来的页面是白屏或者出现{"statusCode":404,"error":"Not Found"} 解决
mcq
2018/06/20
1.5K0
app首页返回键处理
<script type="text/javascript" src="static/js/mui.js"></script> <script type="text/javascript"> mui.plusReady(function() { //首页返回键处理 //处理逻辑:1秒内,连续两次按返回键,则退出应用; var first = null; plus.key.addEventListener('backbutton', function() { //首次按键,提
biaoblog.cn 个人博客
2022/08/11
3840
真正读懂SPC,没有任何拒绝他的理由!
SPC 是Statistical Process Control的首字母缩写,统计过程控制。
用户9972271
2023/01/13
5380
没有任何机械基础,如何自学机械设计?
机械设计第一阶,学习《工程图学》。 按照大学的计划应该是先学习数学的,如果你是在机械行业工作那真是有着极大的优势,可以结合实践,边实践,边理论学习。先感性认识,再升华到理性认识,最后再回到生产实践中去。循环往复,以至无穷。学习工程图学,可以让你看得懂图纸,利用工作之便,以最快的速度积累大量的实践经验。 工程图学,包括两部分,“几何画法”和“机械制图”。“几何画法”是教你最基本的透视原理,图纸最重要的是严谨,它和普通绘画不同,有着严格的透视要求,透视画错了,图纸也就错了,那就没法运用到生产中,更没法和别的设计
机器人网
2018/04/12
2.9K0
SpringMVC内容协商返回jsonxml格式
springMVC内容协商需要引入以下包 <!--springMVC内容协商需要引入以下包--> <dependency> <groupId>com.fasterxml.jackson.dataformat</groupId> <artifactId>jackson-dataformat-xml</artifactId> <version>2.9.7</version> </dependency>
stys35
2019/03/05
7410
uni-app渲染商品列表
<template> <view class="page"> <view class="uni-product-list"> <view class="uni-product" v-for="(item,index) in productList" :key="index"> <view class="image-view"> <image v-if="renderImage" class
王小婷
2019/12/24
2.8K1
uni-app渲染商品列表
使用 CLIP 对没有任何标签的图像进行分类
深度图像分类模型通常在大型带注释数据集上以监督方式进行训练。尽管模型的性能会随着更多注释数据的可用而提高,但用于监督学习的大规模数据集通常难以获得且成本高昂,需要专家注释者花费大量时间。考虑到这一点,人们可能会开始怀疑是否存在更便宜的监督资源。简而言之,是否有可能从已经公开可用的数据中学习高质量的图像分类模型?
小白学视觉
2022/12/27
3.5K0
使用 CLIP 对没有任何标签的图像进行分类
解决写文件断电重启后内容不变的问题
「因为Linux系统为了效率不会实时将文件内容写入到磁盘中,而是临时写入到系统buffer(内存)。」 每隔一段时间(一般为30s)才会真正写入到磁盘中。在此间隔中断电重启会导致文件并没有真正写入到磁盘中。
Qt君
2020/04/14
1.9K0
一个好像没有做任何改变的参数
实际上就是一行命令在运行比对过程,但是呢,参数太多了,调起来很麻烦,通常如果不理解的话就不建议修改参数。
生信技能树
2019/11/06
1.5K0
一个好像没有做任何改变的参数
甲骨文面临的最大威胁:没有任何变化
Larry Ellison已经步下甲骨文CEO的神坛、转而出任公司首席技术官,与此同时SafraCatz与Mark Hurd二位则顺利升任联席CEO——甲骨文官方就此作出承诺,表示此次高管层变动将不会给公司的日常运营及战略方针造成任何改变。但这种如甲骨一般千年不变的状态真像该公司所声称的那样理想吗? 让我们回到现实层面。Ellison让出CEO一职可能并不会给甲骨文公司带来什么实质性影响,毕竟Catz与Hurd完全有能力继续帮助红色巨人保持稳定的运作状态。Ellison过去一直在技术及战略方针制定领域扮演着
静一
2018/03/20
1.2K0
甲骨文面临的最大威胁:没有任何变化
神兵利器 - 在没有任何权限的情况下破解任何 Microsoft Windows 用户密码
项目地址:https://github.com/DarkCoderSc/win-brute-logon
Khan安全团队
2022/04/02
1.7K0
神兵利器 - 在没有任何权限的情况下破解任何 Microsoft Windows 用户密码
HarmonyOS/OpenHarmony 双击返回与退出App
Open Harmony测试环境:ApI9,OpenHarmony3.2.beta4
徐建国
2023/02/23
1.5K0
HarmonyOS/OpenHarmony 双击返回与退出App
vue 渲染HTML代码 后台返回HTML代码
实现:<span v-html='html'></span> 使用 v-html 赋值就可以了
onety码生
2018/11/21
27.1K2
Android App常规测试内容
对于质量平台(接口测试,自动化测试,性能测试,兼容性,数据收集)只是一概而过,这个无法一一说清楚。但对于测试过程要注意的内容,我觉得可以慢慢丰富起来,本章内容如有遗漏,可以评论,留言补充~
FunTester
2019/10/08
1K0
苹果“开除”Facebook,原因是后者违反协议分发数据收集APP
近日,因为推出的APP“Research”,Facebook再次被推上了“数据隐私”的风口浪尖。针对此,苹果对Facebook下达了一份判决书——撤销iOS开发者证书。
镁客网
2019/03/04
5780
苹果“开除”Facebook,原因是后者违反协议分发数据收集APP
为什么网站排名高,而没有任何流量呢?
在做SEO的过程中,相信每一个SEO人员都会有这样的经历,那就是我们每天都在为思考网站排名相关问题,而绞尽脑汁。
蝙蝠侠IT
2021/06/08
4640
为什么网站排名高,而没有任何流量呢?

相似问题

渲染没有返回任何内容。

14

“渲染中没有返回任何内容”

11

ReactJS -渲染中没有返回任何内容

10

反应本机渲染错误-渲染中没有返回任何内容

12

反应错误:渲染中没有返回任何内容

40
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文