【发布时间】:2020-05-27 16:36:52
【问题描述】:
你好吗。 这是这个问题的场景。 假设有 2 个屏幕可以使其变得简单。
- 进入A屏。 useEffect of A screen called.
- 从 A 屏幕导航到 B 屏幕
-
从 B 导航回 A 屏幕。 此时,useEffect 没有被调用。
function CompanyComponent(props) { const [roleID, setRoleID] = useState(props.user.SELECTED_ROLE.id) useEffect(()=>{ // this called only once when A screen(this component) loaded, // but when comeback to this screen, it doesn't called setRoleID(props.user.SELECTED_ROLE.id) }, [props.user]) }
所以再次回到A屏时A屏的更新状态保持不变(不是从道具加载)
我没有更改屏幕 B 中的 props.user。
但我认为const [roleID, setRoleID] = useState(props.user.SELECTED_ROLE.id)至少应该调用这一行。
我正在使用 redux-persist。我认为这不是问题。 对于导航,我使用这个
// to go first screen A, screen B
function navigate(routeName, params) {
_navigator.dispatch(
NavigationActions.navigate({
routeName,
params,
})
);
}
// when come back to screen A from B
function goBack() {
_navigator.dispatch(
NavigationActions.back()
);
}
屏幕出现时我可以使用任何回调吗? 我的代码有什么问题?
谢谢
【问题讨论】:
-
当你回到屏幕 A 时是否更改了 props.user?
-
useEffect不再被调用,因为props.user在您的情况下保持不变...您可以在一个组件中使用多个useEffects:) -
您如何在屏幕之间导航?可以加点代码吗?
-
你用的是什么导航包?导航做更多的堆栈而不是卸载“后退”“页面”吗?
useEffect钩子只会在第一次渲染时触发,并且只要它的依赖数组中的值更新,所以我怀疑它不会因为没有被重新挂载而再次触发。
标签: reactjs react-native use-effect