You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React-Native:React-Navigation栈导航下Redux dispatch函数为undefined问题

解决React Navigation中Redux Dispatch函数storeUser is not a function的问题

嘿,我一眼就看出问题出在哪了——你在导航栈里用错了Login组件的版本!

问题根源

看你的UnAuthenticatedStack代码,你是这么导入Login组件的:

import { Login } from '../../../screens/Login';

但在你的Login组件文件里,经过Redux connect包装、能拿到storeUser的组件是作为默认导出的,而你导入的{ Login }是未经过任何Redux连接的原始类组件,它根本没有storeUser这个props,自然会报错说它不是函数。

快速解决方案

把导航栈里的导入改成默认导入就行:

// 去掉花括号,用默认导入
import Login from '../../../screens/Login';

备选方案(如果需要保留命名导出)

如果你因为某些原因要保留原始组件的命名导出,可以在Login组件里把连接后的组件也做命名导出:

// 在Login组件文件末尾修改
const ConnectedLogin = connect(mapStateToProps, mapDispatchToProps)(Login);
// 导出原始组件和连接后的组件
export { Login, ConnectedLogin };

然后在导航栈里导入并使用连接后的版本:

import { ConnectedLogin } from '../../../screens/Login';

// 在Stack.Navigator里替换成ConnectedLogin
<Stack.Screen name="Login" component={ConnectedLogin}></Stack.Screen>

为什么直接调用组件正常?

你直接在App里写<Login></Login>时,用的应该是默认导入的、已经连接Redux的组件版本,所以能正常拿到storeUser。但导航栈里用的是未连接的原始组件,它的props里根本没有这个dispatch函数,打印出来就是undefined,调用当然会报错。

记住:React Navigation的Stack.Screen接收的component必须是已经和Redux连接好的组件,否则它无法获取到Redux store里的dispatch和state。

内容的提问来源于stack exchange,提问作者0x01Brain

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.08 14:42:39