TypeError:未定义不是一个对象(评估'_route$params.useremail')
我该如何修复此错误?当我返回屏幕时,它显示此错误,有人知道我该如何修复此问题吗?我从不同的屏幕获取 useremail 和 userVerificationCode,你们都可以看到我的 useremail 和 userVerificationCode 来自哪个函数
const ForgetPassword_Verify = ({ navigation, route }) => {
const { useremail, userVerificationCode } = route.params
console.log(useremail, userVerificationCode)
const [verificationCode, setVerificationCode] = useState('');
const handleVerificationCode = () => {
if (verificationCode != userVerificationCode) {
alert('Invalid Verification Code')
}
else {
alert('Verification Code Matched')
navigation.navigate('forgetpassword_choose_newpassword', { email: useremail })
}
}
return (
<View style={containerFull}>
<TouchableOpacity onPress={() => navigation.navigate('forgetpassword_email')} style={goback}>
<AntDesign name="arrowleft" size={24} color="grey" />
<Text style={{ color: 'grey', fontSize: 16, marginLeft: 5, fontWeight: 'bold' }}>Go Back</Text>
</TouchableOpacity>
{/* <Image source={logo} style={logo1} /> */}
<Text style={formHead3}>A verification code is sent to your email!</Text>
<TextInput placeholder='Enter 6 digit code' placeholderTextColor="grey" style={formInput}
onChangeText={(text) => setVerificationCode(text)}
/>
<Text style={formbtn} onPress={() => handleVerificationCode()}>Next</Text>
</View>
)
}
export default ForgetPassword_Verify
useremail 和 userVerificationCode:
const handleEmail = () => {
if (email === '') {
alert('Please enter email')
}
else {
setLoading(true)
fetch('http://10.0.2.2:3000/verifyforgetpassword', {
method: 'POST',
headers: {
'Content-Type': 'application/json'
},
body: JSON.stringify({ email: email })
})
.then(res => res.json()).then(data => {
if (data.error === "User not found with this email") {
alert('User not found with this email')
setLoading(false)
}
else if (data.message === "Verification Code Sent to your Email") {
setLoading(false)
alert(data.message);
navigation.navigate('forgetpassword_verify', {
useremail: data.email,
userVerificationCode: data.VerificationCode
})
}
})
}
}
您使用的是
react-router
吗?我也不知道
handleEmail
函数在哪里被调用。但根据我在
react-router
中看到的内容,我猜测您使用
useParams
来访问参数。请参阅:
https://reactrouter.com/en/main/hooks/use-params
由于数据是从导航参数接收的,如果您使用后退按钮而不是
navigation.navigate
导航到该屏幕,则属性
route.params
将未定义,因为后退按钮不发送任何参数。
有一些可能的解决方案:
选项 1 不要通过导航参数传递数据;改用全局状态。您可以使用 react context 或状态管理库(如 Redux)。在任何屏幕上修改全局状态中的数据,并在另一个屏幕上读取数据。我认为这是理想的解决方案,因为如果您仍然通过导航参数处理数据,此问题可能会在另一个屏幕上再次发生。
选项 2
尝试覆盖您的后退按钮并将参数传递给导航。在您想要在按下返回按钮时返回
forgetpassword_verify
屏幕的任何组件屏幕上执行此操作。
import { BackHandler } from 'react-native';
useEffect(() => {
const backHandler = BackHandler.addEventListener('hardwareBackPress', () => {
navigation.navigate('forgetpassword_verify', {
useremail,
userVerificationCode
})
return true;
})
return () => backHandler.remove()
}, [])
选项 3
使用选项
headerBackVisible: false​
禁用返回按钮,并实现您自己的返回按钮 UI。