我想这有什么奇怪的地方在于我可以临时修复它。我正在使用 react-native、expo 和 react-navigation 5。
我基本上构建了一个自定义菜单,以便在选择项目时,会发生一些东西。我将一个字符串 selectedId 传递到另一个屏幕以将状态从一个屏幕设置为下一个。
此功能过去运行良好,但在此过程中的某个地方(糟糕),当我重新启动应用程序时,导航到该屏幕时开始收到错误消息。
undefined is not an object (evaluating 'route.params.selectedId;)
要修复此错误,我只需将 {selectedId} = route.params
写为 selectedId = route.params
并保存。现在菜单可以工作了,但是 renderElement()
没有加载。现在这是奇怪的部分,当我将它改回 {selectedId} = route.params
时,renderElement() 现在加载并且一切都按预期工作。什么可能导致这种行为?
我的代码:
const ShopScreen = () => {
const route = useRoute();
const {selectedId} = route.params;
console.log(selectedId);
function renderElement () {
if(selectedId === '1'){
return (<View>
<Text style={{ color: 'white'}}>
Test Page
</Text>
</View>);
}
return (
<View style={styles.container}>
<View>
<NavMenu />
</View>
<View style={{ alignSelf: 'center', height: '84%'}}>
{renderElement()}
</View>
</View>
)}
从另一个屏幕:
const [selectedId, setSelectedId] = useState('1');
const navigation = useNavigation();
useEffect(() => {
navigation.navigate('Shop', {selectedId: selectedId});
}, [selectedId]);
//return