在componentDidMount()

时间:2019-01-23 01:43:53

标签: javascript react-native

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

我试图使用react-native的Asynchronous存储来在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()中的名称变量始终是一个空字符串,因此它根本没有被更改,或者getItem()函数无法解析并返回名称。但是,我不确定这是哪两个。我是否错误地使用了异步功能?

1 个答案:

答案 0 :(得分:0)

您还必须将 componentDidMount 设置为也异步

使用数据的示例:

<p id="demo"></p>

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

下一步,这可能是个人原因,但我建议在存储数据时使用 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=value);
    } catch (error) {
        // Error retrieving data
    }
  } 
}

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

相关问题