【问题标题】:How do I display data from AsyncStorage in a custom component?如何在自定义组件中显示来自 AsyncStorage 的数据?
【发布时间】:2019-12-30 06:54:44
【问题描述】:

我是 react-native 的新手。所以,我有一个名为 Task 的自定义组件,并且我有一些数据存储在 AsyncStorage 中。我已经检查过数据确实通过另一个组件/模式存储在 AsyncStorage 中。但是当我试图从 AsyncStorage 取回数据时(见下面的代码),它没有显示任何内容。我的自定义组件可以正常显示数据,只是无法从 AsyncStorage 获取/显示数据。我在这里做错了吗?请帮帮我。

在 render() 函数内部/调用:

  <Task name={async ()=>await AsyncStorage.getItem('taskname')}
                        desc={async ()=>await AsyncStorage.getItem('taskdesc')}
                        date={async ()=>await AsyncStorage.getItem('taskdate')}/>

【问题讨论】:

    标签: react-native react-native-android


    【解决方案1】:

    将存储的值放入状态值中并使用。

    this.state={
       name : '';
       desc : '';
       date : '';
    }
    ...
    
    async getdata() {
    let taskname =  await AsyncStorage.getItem('taskname')
    let taskdesc =  await AsyncStorage.getItem('taskdesc')
    let taskdate =  await AsyncStorage.getItem('taskdate')
    this.setState({
       name : taskname;
       desc : taskdesc;
       date : taskdate;
    });
    }
    ...
      <Task name={this.state.name}
                            desc={this.state.desc}
                            date={this.state.date}/>
    

    【讨论】:

      【解决方案2】:

      您必须将此代码放入 componentDidMount 并调用。

      constructor() {
           super();
           this.state = {
             name : '';
             desc : '';
             date : '';
           }
         }
       componentDidMount= async()=>{
       let taskname =  await AsyncStorage.getItem('taskname')
       let taskdesc =  await AsyncStorage.getItem('taskdesc')
       let taskdate =  await AsyncStorage.getItem('taskdate')
      
       }
      
       render(){
       return(
       <View>
       <Task name={this.state.name} desc={this.state.desc} date={this.state.date}/>
       </View>
       )
       }
      

      【讨论】:

        【解决方案3】:

        我在这里看到了很多解决方案,但是您还应该添加loading 状态,因为您的任务组件首先会收到空字符串。

        因此,更好的方法是在收到数据之前添加加载。

        this.state={
           loading: true,
           name : '';
           desc : '';
           date : '';
        }
        
        async componentDidMount(){
        
         let taskname =  await AsyncStorage.getItem('taskname')
         let taskdesc =  await AsyncStorage.getItem('taskdesc')
         let taskdate =  await AsyncStorage.getItem('taskdate')
         this.setState({ ...set your state here}, () => {
          and then update the loading state.
         })
          }
        

        当loading为true时,可以渲染一个loading组件,也可以为null。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-09-24
          • 2019-12-14
          • 2020-10-16
          • 2017-11-30
          • 1970-01-01
          • 2020-08-24
          • 2018-02-18
          • 2014-06-29
          相关资源
          最近更新 更多