未集成Redux时能否使用标准React Navigation?
当然可以这么做!
React Navigation 和 Redux 并没有强制绑定的要求——你完全可以在已经使用 Redux 处理其他功能的项目里,用标准的 React Navigation 来管理页面跳转,不需要额外把导航逻辑集成到 Redux 中。
不过看你给出的 App.js 代码有个关键问题,导致你没法正常使用 navigation props:你定义了 StackNavigator,但最终渲染的是 <Home /> 而不是导航组件本身,这会让 Home 组件接收不到导航相关的 props。
修正后的代码示例
App.js
export default class App extends Component { render() { const Navigation = StackNavigator({ Home: {screen: Home }, Page: {screen: Page }, }); return ( <Provider store={store}> <Navigation /> {/* 这里要渲染导航组件,而不是直接渲染Home */} </Provider> ); } }
home.js(示例)
import React, { Component } from 'react'; import { Button } from 'react-native'; import { connect } from 'react-redux'; // 如果需要访问Redux状态才引入 class Home extends Component { render() { return ( <Button title="跳转到Page页面" onPress={() => this.props.navigation.navigate('Page')} /> ); } } // 如果你需要让Home组件访问Redux的状态或dispatch,就用connect包裹 const mapStateToProps = (state) => ({ // 这里添加你需要从Redux state中获取的数据 // 比如 userInfo: state.user.info }); export default connect(mapStateToProps)(Home);
关键说明
- 把导航组件放在
Provider内部,这样所有导航屏幕都能正常访问 Redux store,同时也能获取到 React Navigation 提供的navigationprops。 - 你的屏幕组件如果需要使用 Redux 的状态或 dispatch,直接用
connect高阶组件包裹即可,这和导航功能完全不冲突。 - 这种模式下,Redux 负责全局状态管理,React Navigation 负责页面路由和跳转,两者各司其职,非常适合大多数场景。
内容的提问来源于stack exchange,提问作者Alessio Chiffi
相关产品推荐
相关产品推荐

