【问题标题】:Saving input data on async storage将输入数据保存在异步存储上
【发布时间】:2018-12-09 07:25:00
【问题描述】:

我一直在尝试将输入数据保存在异步存储中,但是每当我在输入后返回时,它会显示以前的数据,而不是更新的数据。这是我认为需要进行一些更改的代码。

constructor(props) {
    super(props)
    this.state = {
      userData: {
        address: ''
      }
    }
  }
  saveAddressEdit = (fieldName, fieldValue) => {
    AsyncStorage.setItem(userData.address, fieldValue)
  }
  render() {
    const {address} = this.state.userData

    return (
      <Input placeholder=" Type your Address:" 
             onChangeText={(address) => this.setState({address})}
             value={address} />
          
         <Button full danger  onPress={()=>this.saveAddressEdit('address', address)} style={{backgroundColor:'#ff0000'}}>      
           );
          }
       

【问题讨论】:

  • 您能否更具体地说明您想要实现的输出?目前尚不清楚您想要实现的目标。

标签: reactjs react-native


【解决方案1】:

如果您想使用 AsyncStorage 在组件生命周期中持久保存您的地址,那么您应该首先正确保存它,一旦您回到屏幕上,获取它并将其填充回您的状态,因为组件的状态需要使用重新初始化你的 AsyncStorage。

以下代码应该有助于将地址初始化回存储的地址:

componentDidMount () {
   AsyncStorage.getItem('address').then(value => {
      if (value) {
         this.setState({address: value});
      }
   })
}

下面指定了将数据设置为 AsyncStorage 的正确方法:

 saveAddressEdit = async (fieldName, fieldValue) => {
    await AsyncStorage.setItem(fieldName, fieldValue)
 }

或者您也可以像我在上面的getItem 中那样使用promise 方式,例如setItem(fieldName, fieldValue).then(value =&gt; console.log('saved')),但由于我们不需要处理then 中的任何内容,所以我拒绝在这些地方使用promise。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-29
    相关资源
    最近更新 更多