在从一个屏幕到另一个屏幕的转换过程中,我得到了一个对象未定义的异常。我很清楚发生了什么,我只是不确定是否有一种干净的方法来处理它,而不只是检查是否到处都是未定义的。
下面是我的场景:
由于转换,我假设源屏幕和目标屏幕有一些重叠。我试着增加听众而没有运气。我只能让侦听器处理程序为type = action触发,
我可能会使这件事变得比现在更复杂,但我想知道是否有一种标准的方法来处理这件事,或者我是否以一种完全错误的方式来处理这件事。
此外,我的反应导航是与Redux结合,根据说明的反应导航的网站和Redux反应导航样例代码。
这是基本代码。
屏幕1
componentDidMount() {
// This is a Redux action that sets an object called user to null
clearUser();
{
屏幕2
render() {
return (
// Other code here
// user is null here because render gets called after Screen1#componentDidMount() gets called
<Text>{user.firstName + ' ' + user.lastName}</Text>
<TouchableOpacity
onPress={() => navigation.dispatch({ type:'NAV_SCREEN_1' })}
>
// button code here
</TouchableOpacity>
// Other code here
)
}
错误类型为"TypeError:无法读取null的属性'firstName‘“
我理解这个错误,以及为什么我要得到它。用户对象被我在屏幕1的componentDidMount()中的Redux操作设置为null,然后Redux使屏幕2的呈现被调用,这是引用用户对象为null。
我的问题是,是否有一种特殊的方法来适应这种行为,而不必检查用户对象是否为空?我应该在其他地方打电话给clearUser()吗?
发布于 2018-04-30 19:39:11
对于最新版本的react-navigation
,您可以使用addListener、withNavigationFocus或isFocused来检测屏幕的过渡状态。
另一种非官方的方法是捕获动作类型NavigationActions.COMPLETE_TRANSITION
,以便使用像redux-saga
这样的中间件。
发布于 2018-10-21 16:43:20
作为替代,您可以简单地使您的Redux连接的屏幕句柄未定义或空状态。我也遇到了类似的问题,当用户状态未定义时,我将呈现一个加载程序而不是屏幕内容。当我注销时,屏幕会显示一个加载程序,只需一秒钟,然后应用程序就会离开。
https://stackoverflow.com/questions/50091921
复制相似问题