React Native expo - 如何使用 AsyncStorage 只显示一次屏幕
React Native expo - How to show screen only once with AsyncStorage
我试图只向首次使用应用程序的用户展示我的 'Create ProfileScreen' 一次。
但是它似乎没有按预期运行,我想这可能是由于我的逻辑,我真的很感激帮助。下面是我的逻辑和代码:
加载屏幕
import { AsyncStorage } from 'react-native'
export default LoadingScreen = ({ navigation }) => {
const value = AsyncStorage.getItem('FirstTime')
return navigation.navigate(value === null ? 'Register' : 'HomeScreen')
}
个人资料上下文
const saveLogin = async () => {
try {
await AsyncStorage.setItem('FirstTime', 'true')
alert('saved')
} catch (err) {
alert(err)
}
}
const removeLogin = async () => {
try {
await AsyncStorage.removeItem('FirstTime')
alert('Removed')
} catch (err) {
alert(err)
}
}
个人资料屏幕
完成个人资料表格后,您 submit
并且 value
从 'null' 设置为 'true'。所以当我重新加载应用程序时,它总是带我到主页,即使我删除了该值或将其设置为 'null'.
<TouchableOpacity onPress={()=>{onSubmit(),()=>saveLogin()}}>
<Text style={{ color: '#fff', fontWeight: '500' }}>Submit</Text>
</TouchableOpacity>
再见,AsyncStorage.getItem
也是异步的。所以你可以这样做:
import { AsyncStorage, ActivityIndicator } from 'react-native'
export default LoadingScreen = ({ navigation }) => {
componentDidMount() {
AsyncStorage.getItem('FirstTime', (result) => {
navigation.navigate(result === null ? 'Register' : 'HomeScreen')
})
}
render() {
return (
<ActivityIndicator />
);
}
}
感谢@Giovanni Esposito,我设法找到了解决方案。
我在加载屏幕中使用 getItem
,在 CreateProfile 屏幕中使用 setItem
。并且工作得很好。谢谢 :D
export default LoadingScreen = ({ navigation }) => {
useEffect(() => {
load()
}, [])
const load = async () => {
AsyncStorage.getItem('FirstTime').then(result => {
if (result !== null) {
navigation.navigate('HomeScreen')
} else {
navigation.navigate('Register')
}
})
}
return <ActivityIndicator />
}
我试图只向首次使用应用程序的用户展示我的 'Create ProfileScreen' 一次。 但是它似乎没有按预期运行,我想这可能是由于我的逻辑,我真的很感激帮助。下面是我的逻辑和代码:
加载屏幕
import { AsyncStorage } from 'react-native'
export default LoadingScreen = ({ navigation }) => {
const value = AsyncStorage.getItem('FirstTime')
return navigation.navigate(value === null ? 'Register' : 'HomeScreen')
}
个人资料上下文
const saveLogin = async () => {
try {
await AsyncStorage.setItem('FirstTime', 'true')
alert('saved')
} catch (err) {
alert(err)
}
}
const removeLogin = async () => {
try {
await AsyncStorage.removeItem('FirstTime')
alert('Removed')
} catch (err) {
alert(err)
}
}
个人资料屏幕
完成个人资料表格后,您 submit
并且 value
从 'null' 设置为 'true'。所以当我重新加载应用程序时,它总是带我到主页,即使我删除了该值或将其设置为 'null'.
<TouchableOpacity onPress={()=>{onSubmit(),()=>saveLogin()}}>
<Text style={{ color: '#fff', fontWeight: '500' }}>Submit</Text>
</TouchableOpacity>
再见,AsyncStorage.getItem
也是异步的。所以你可以这样做:
import { AsyncStorage, ActivityIndicator } from 'react-native'
export default LoadingScreen = ({ navigation }) => {
componentDidMount() {
AsyncStorage.getItem('FirstTime', (result) => {
navigation.navigate(result === null ? 'Register' : 'HomeScreen')
})
}
render() {
return (
<ActivityIndicator />
);
}
}
感谢@Giovanni Esposito,我设法找到了解决方案。
我在加载屏幕中使用 getItem
,在 CreateProfile 屏幕中使用 setItem
。并且工作得很好。谢谢 :D
export default LoadingScreen = ({ navigation }) => {
useEffect(() => {
load()
}, [])
const load = async () => {
AsyncStorage.getItem('FirstTime').then(result => {
if (result !== null) {
navigation.navigate('HomeScreen')
} else {
navigation.navigate('Register')
}
})
}
return <ActivityIndicator />
}