我将 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 中设置的两个警报。
任何帮助将不胜感激。