【发布时间】:2022-01-20 20:59:09
【问题描述】:
我在 react native 中有一个 react 组件,我想手动处理 hardwareBackButton。 当我传递给 hardwareBackPressListener 的 backHandler 函数中的 redux 状态为真或假时,我有不同的行为。
const brandSelected = useSelector(state => state.map.brandSelected);
我的组件中有这个 useSelector 来访问状态。 并且我有 useEffect 函数来监视此状态的变化:(它可以正常工作并在状态更改为 true 或 false 时记录状态。
React.useEffect(() => {
console.log(brandSelected); // this is false correctly
}, [brandSelected]);
最后我有一个 backHandler 函数,我将它传递给 hardwareBackPress 监听器。
React.useEffect(() => {
BackHandler.addEventListener('hardwareBackPress', backHandler);
return () => {
BackHandler.removeEventListener('hardwareBackPress', backHandler);
};
}, []);
和backHandler函数:
const backHandler = () => {
console.log('check, backhandler', brandSelected) // it logs true continuously
if (brandSelected === true) {
dispatch(
dispatchItemToRedux({
type: CATEGORIES_SELECTION,
payload: {
brandSelected: false,
},
}),
);
return true;
}
popScreen(Screens.Map);
return true;
};
但此函数不会通知brandSelected 状态已更改。它第一次正常工作并调度函数并正确更改 redux 状态并正确使用 useEffect 函数 log false。但在其他尝试中,它无法正常工作并且没有任何改变!
【问题讨论】:
标签: reactjs react-native redux react-redux arrow-functions