javascript - 不变违规 : App(. ..) 渲染器未返回任何内容

标签 javascript reactjs react-native

我正在尝试根据 AsyncStorage 的 promise 呈现组件,但出现此错误:

Exception: Invariant Violation: App(...): Nothing was returned from render. This usually means a return statement is missing. Or, to render nothing, return null.

我确信这些组件是好的,因为我尝试单独渲染它们中的每一个并且它们都工作得很好,当我试图通过 AsyncStorage.getItem 渲染它时我无法做到它完成了。

代码:

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() 
    ) 
}

当我这样做的时候:

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

效果很好!

当我这样做的时候:

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

它也很好用,所以功能很好,是逻辑还是最上面的东西我做不出来。

最佳答案

AsyncStorage 是异步的,因此它不会立即返回您编写的 View 。在 AsyncStorage 检索到您的数据之前,您需要显示微调器或自定义 View 。

解决方法:

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>
        )
    }
}

关于javascript - 不变违规 : App(. ..) 渲染器未返回任何内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50373673/

相关文章:

javascript - 如何访问 Javascript 对象的第一个属性?

reactjs - 如何返回axios的响应作为返回

reactjs - 构建文件名称更改 - 从创建 react 应用程序生成的文件

java - 任务:react-native-gesture-handler:compileDebugJavaWithJavac FAILED

javascript - 如何创建动态字典和添加删除键值对?

javascript - 为什么我的两个图表重复相同的标签?

javascript - 为什么 AMD 以与 javascript 性质相反的顺序定义其可选参数?

javascript - 为什么在多个位置进行更新的行为类似于 SET 而不是 UPDATE?

javascript - 尽管使用目标 ="_blank",但 React Markdown 链接不会在新选项卡中打开

react-native - React Native – FlatList 滚动到底部,键盘向上