Reactjs React Native无法使用异步存储中的数据更新状态挂钩
您好,我正在学习react native中的异步存储。 所以我写了一些这样的状态Reactjs React Native无法使用异步存储中的数据更新状态挂钩,reactjs,react-native,react-native-android,asyncstorage,Reactjs,React Native,React Native Android,Asyncstorage,您好,我正在学习react native中的异步存储。 所以我写了一些这样的状态 const [isLoading,setIsLoading] = useState(true) const [id, setId] = useState(null) setAsyncStorage('id', JSON.stringify(loginData.id)) 我将其设置为null是因为我想从AsyncStorage获取id,所以我编写了一个简单的函数来获取和设置值,如下所示: async functi
const [isLoading,setIsLoading] = useState(true)
const [id, setId] = useState(null)
setAsyncStorage('id', JSON.stringify(loginData.id))
我将其设置为null是因为我想从AsyncStorage获取id,所以我编写了一个简单的函数来获取和设置值,如下所示:
async function getAsyncStorageId(){
const userId = await AsyncStorage.getItem('id')
console.log('user id from AsyncStorage is: ',userId)
setId(userId)
console.log('state hooks id : ',id)
}
我把它投入使用
useEffect(()=>{
getAsyncStorageId()
},[])
所以我测试我的代码,id状态不会更新它,但console.log(userId)有一个id值
user id from AsyncStorage is: 6
state hooks id : null
我不知道为什么我不能用异步存储中的值设置状态
=======================
*编辑:这是我用来在异步存储中设置id的代码。
我将此代码放在我的登录屏幕中,因此当用户成功登录时,我将id、用户名、令牌和角色存储在异步存储中
const login = async () => {
try {
let response = await axios.post(`${url}/users/login`, {
email: props.email,
password: props.password,
});
let loginData = response.data;
console.log(loginData,'sukses login')
setAsyncStorage('token',loginData.token)
loginData.name === null ? setAsyncStorage('name', 'pengguna') : setAsyncStorage('name',loginData.name)
setAsyncStorage('role', loginData.role)
setAsyncStorage('id', loginData.id)
props.navigation.navigate("Artikel",{
id:loginData.id,
token:loginData.token,
name:loginData.name
})
} catch (error) {
console.log('error login',props.email,props.password);
alert(error.response.data.message)
}
})
export const setAsyncStorage=async(键,值)=>{
试一试{
等待AsyncStorage.setItem(`${key}`、`${value}`);
}捕获(错误){
console.log(错误);
}
};
我认为您只能将字符串
类型存储在异步存储
中。尝试这样设置值
AsyncStorage.setItem('id', '5')
你的情况是这样的
const [isLoading,setIsLoading] = useState(true)
const [id, setId] = useState(null)
setAsyncStorage('id', JSON.stringify(loginData.id))
更新:
const [id, setId] = useState('')
您能告诉我您在
AsyncStorage
中设置id
的代码吗?setId
是异步的,所以调用setId
后id
被记录为空是正常的。只需在setId(userId)
之前添加wait
,通常它应该work@MahdiN我已经尝试过了,但是值仍然是“null”@MahdiN,但是当我编辑我的代码(在任何地方)时,应用程序会自动刷新,并且不知何故,值发生了变化,但是,当我重建并直接转到profilescreen时,它不会改变,我认为这是因为快速刷新,当您更改代码时,仿真器会用新代码刷新。我确定问题出在asynchronoussetId
,在useEffect中调用GetAsynchStorageId
后尝试控制台日志id,并将wait添加到GetAsynchStorageIDMy SetAsynchStorage自动将编号更改为string问题是我无法使用async storage的值更改我的状态挂钩