我正在尝试保存用户输入到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()函数无法解析并返回名称。但是,我不确定这是哪两个。我是否错误地使用了异步功能?
答案 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
}
}
}
如果这有帮助,请设置为答案,否则请发表评论。