Reactjs 没有';无法正确返回AsyncStorage.getItem()
我尝试使用sync函数从AsyncStorage中的键中获取值,并尝试在console.log()命令上打印该值,但当我使用三元函数生成if时,会出现如下错误 未捕获错误:不变冲突:不变冲突:对象作为React子对象无效(找到:具有键{u 40、{u 65、{u 55、{u 72)的对象) 这里是navigator react native的部分代码Reactjs 没有';无法正确返回AsyncStorage.getItem(),reactjs,react-native,async-await,Reactjs,React Native,Async Await,我尝试使用sync函数从AsyncStorage中的键中获取值,并尝试在console.log()命令上打印该值,但当我使用三元函数生成if时,会出现如下错误 未捕获错误:不变冲突:不变冲突:对象作为React子对象无效(找到:具有键{u 40、{u 65、{u 55、{u 72)的对象) 这里是navigator react native的部分代码 Guest:{ screen:MainScreen, navigationOptions: ({navigation}) => ({
Guest:{
screen:MainScreen,
navigationOptions: ({navigation}) => ({
headerLeft:
(async () => {
const login = await AsyncStorage.getItem("isLogin");
(login == null) ?
<Text></Text>
:
<Icon
style={{ paddingLeft: 10, color: '#ffffff', }}
onPress={() => navigation.openDrawer()}
name="menu"
size={30}
/>
})
,
headerTransparent:true,
})
客人:{
屏幕:主屏幕,
导航选项:({navigation})=>({
左校长:
(异步()=>{
const login=await AsyncStorage.getItem(“isLogin”);
(登录名==null)?
:
navigation.openDrawer()}
name=“菜单”
大小={30}
/>
})
,
校长:是的,
})
}为页眉左侧创建组件,其中包含从存储中获取的内容的状态,并将导航作为道具推送。 在异步组件上,将装载组件从存储中获取异步并更新状态
Guest:{
screen:MainScreen,
navigationOptions: ({navigation}) => ({
headerLeft:<MyHeaderLeft navigation={navigation}/>.....
客人:{
屏幕:主屏幕,
导航选项:({navigation})=>({
头左:。。。。。
您的headerLeft
函数返回承诺,因为它是异步的
但是headerLeft
必须返回React.Element,我猜
所以最好删除异步并创建单独的组件
import React, { useEffect, useState } from 'react';
const getLogin = async(setLogin) => {
const login = await AsyncStorage.getItem('isLogin');
setLogin(login);
}
export const HeaderLeft = ({navigation}) => {
const [login, setLogin] = useState(null);
useEffect(() => {
getLogin(setLogin);
}, []);
return (login == null)
? <Text/>
: <Icon
style={{ paddingLeft: 10, color: '#ffffff', }}
onPress={() => navigation.openDrawer()}
name="menu"
size={30}
/>
}
import React,{useffect,useState}来自“React”;
const getLogin=async(setLogin)=>{
const login=await AsyncStorage.getItem('isLogin');
setLogin(login);
}
导出常量HeaderLeft=({navigation})=>{
const[login,setLogin]=useState(null);
useffect(()=>{
getLogin(setLogin);
}, []);
返回(login==null)
?
:navigation.openDrawer()}
name=“菜单”
大小={30}
/>
}
和使用一样
...
headerLeft: <HeaderLeft navigation={navigation}/>
....
。。。
左校长:
....
您编写过示例代码吗?我尝试过编写,但仍然无法正常工作,几乎忘记清除异步存储。但有一个小问题,我无法通过导航道具,请尝试使用@Alfian我刚刚在函数道具中添加了{navigation},您可以尝试