react-native - 当 Redux 状态更改时,React Native 未安装的屏幕呈现
问题描述
我将 React Native 与 Redux 一起使用。目前我有两个使用相同 redux 状态的屏幕。两个屏幕都在一个堆栈导航上。当 redux 状态改变时,第一个屏幕中有一个使用效果调用。同样的一个使用效果调用也在第二个屏幕中,当相同的 redux 状态改变时触发。问题是当我从屏幕 1 导航到屏幕 2 并更改状态时,它会触发两种使用效果。
这是第一个屏幕。我正在使用 navigation.navigate('LoginScreen') 导航到第二个屏幕
export default function StartScreen({route, navigation, props}) {
const {loginStatus,user} = useSelector(state => state.auth);
const initialRender = useRef(true);
useEffect(() => {
console.log('use effect');
if (!initialRender.current) {
if (loginStatus === 'success') {
hideDialog();
navigation.reset({
index: 0,
routes: [{name: 'Dashboard'}],
});
} else if(loginStatus === 'failed') {
alert('invalid QR code!')
hideDialog();
dispatch(clearLoginStatus())
}
} else {
initialRender.current = false;
}
}, [loginStatus]);
return (
<Background maxWidth="85%">
<VectorHeading
img={require('../assets/startvector.png')}
marginBottom={50}
/>
<Header>xxxxxxx</Header>
<Paragraph>
The easiest way to start with your amazing application.
</Paragraph>
<Button mode="contained" onPress={() => navigation.navigate('QRScanner')}>
Scan QR
</Button>
<Button mode="contained" onPress={() => navigation.navigate('LoginScreen')}>
Login
</Button>
<Loader visible={visible} hideDialog={hideDialog} />
</Background>
);
.........
这是第二屏
export default function LoginScreen({navigation, props}) {
....
const {isLoggedIn, loginStatus,user} = useSelector(state => state.auth);
const initialRender = useRef(true);
useEffect(() => {
console.log('use effect');
if (!initialRender.current) {
if (loginStatus === 'success') {
hideDialog();
forward();
} else if(loginStatus === 'failed') {
alert('invalid credentials!')
hideDialog();
dispatch(clearLoginStatus())
}
} else {
initialRender.current = false;
}
}, [loginStatus]);
.........
当“loginStatus”更改时,它会在两个屏幕中呈现 useefect 函数并显示在 useeffect 中设置的两个警报。
任何帮助将不胜感激。
解决方案
尝试在组件卸载时添加另一个 useEffect 来清理,
useEffect(() => {
return () => {
console.log("cleaned up");
};
}, []);
推荐阅读
- flutter-web - Flutter Web 中的多部分文件上传
- ruby-on-rails - 如何通过运行 rake 任务并在 rails 控制台中运行相同的查询从 rails 查询中获得相同的输出
- python - GridSearchCV 的分值
- list - 在对象列表(组合列表)上使用 LINQ 获取与用户相关的信息
- azure-devops-server-2019 - Azure devops 服务器文件系统触发器
- javascript - iframe 文件上传器提交到新标签
- f# - 使用附加字段扩展记录
- sql - 删除 SQL Server 2008 的 concat 和 IIF 函数
- python - 在 jupyter notebook 中使用 bash_profile 变量
- .net - .NET 不支持请求的安全协议