在 componentDidMount() 中存储/获取异步存储值



>我正在尝试保存用户在 TextInput 中输入的名称,以便每次用户打开应用程序时,他们的名字仍将被保存。

我正在尝试使用 react-native 的异步存储来获取 componentDidMount() 函数中的名称。我相信在调用 onSubmit() 方法时没有在它里面设置该值。我尝试删除异步函数中的 await 关键字。我阅读了其他文档,但找不到出错的地方。

onSubmit = () => {
   var that = this
   var data = this.state.textValue;
   nameDict['name'] = data;
   _setData = async () => {
    try {
      const value = await AsyncStorage.setItem('name',data)
      that.setState({textValue:'',name:data})
    } catch (error) {
      that.setState({textValue:'',name:'error'})
    }
  } 
 }
componentDidMount(){
  var that = this;
  var name = ''
this.watchId = navigator.geolocation.watchPosition((position)=>{
  _retrieveData = async () => {
    try {
      const value = await AsyncStorage.getItem('name')
      name = value
    } catch (error) {
        // Error retrieving data
    }
  } 
}

ComponentDidMount() 中的 name 变量始终是一个空字符串,因此它根本没有被更改,或者 getItem() 函数没有解析并返回名称。但是,我不确定两者中的哪一个。我是否错误地使用了异步函数?

你还必须将 set componentDidMount 设置为异步

使用数据的示例:

async componentDidMount(){
var that = this;
  var name = ''
this.watchId = navigator.geolocation.watchPosition((position)=>{
  _retrieveData = async () => {
    try {
      await AsyncStorage.getItem('name').then((value)=>name=value);
    } catch (error) {
        // Error retrieving data
    }
  } 
}

如果您想实际使用该值,我建议将名称设为全局。

接下来,这可能是个人的,但我建议在存储数据时使用 JSON.stringify() 值,在检索数据时使用 JSON.parse()

检索字符串化数据时的示例

async componentDidMount(){
var that = this;
  var name = ''
this.watchId = navigator.geolocation.watchPosition((position)=>{
  _retrieveData = async () => {
    try {
      await AsyncStorage.getItem('name').then((value)=>name=JSON.parse(value));
    } catch (error) {
        // Error retrieving data
    }
  } 
}

如果这有帮助,请设置为答案,如果没有,请发表评论。

相关内容

  • 没有找到相关文章

最新更新