>我正在尝试保存用户在 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
}
}
}
如果这有帮助,请设置为答案,如果没有,请发表评论。