react-native - React Navigation v 2 和 Redux
问题描述
我一直在我的应用程序中使用 react-native-router-flux 并配置了商店,它就像一个魅力。
我现在计划在我的应用程序中使用 react-navigation v2.8,我正在努力完成 configureStore。
我认为 configureStore 将按原样使用 react-native-router-flux 示例。下面是我工作的 react-native-router-flux 示例中的示例代码。
/* global __DEV__ */
import { Router } from 'react-native-router-flux'; //this is not to be used
in react-navigation
import { connect } from 'react-redux';
import { createStore, applyMiddleware, compose } from 'redux';
import { persistStore } from 'redux-persist';
import ReduxPromise from 'redux-promise';
import thunk from 'redux-thunk';
import { createLogger } from 'redux-logger';
import reducers from './index';
connect()(Router); //ROuter is not avaible in react-navigation
let middleware;
if (__DEV__) {
const logger = createLogger();
middleware = [thunk, ReduxPromise, logger];
//middleware = [thunk, ReduxPromise];
} else {
middleware = [thunk, ReduxPromise];
}
export function configureStore() {
const store = compose(applyMiddleware(...middleware))(
createStore
)(reducers);
const persistor = persistStore(store);
return { persistor, store };
}
export const { persistor, store } = configureStore();
解决方案
React Navigation 可以用作通用的 JSX 组件,可以包含在 中Provider
,因此整个 UI 树将在context
. 因此,您可以在应用程序的根目录中初始化存储,将其作为状态变量保存在其中,并使用Provider
.
使用 React Navigation 配置商店并使其在 UI 树中可用的代码应如下所示:
您的 Root 组件应如下所示
import React, {Component} from 'react';
import {Provider} from 'react-redux';
import AppStack from './app/AppNavigation';
import getStore from './app/store';
export default class App extends Component {
constructor (props) {
super(props);
this.state = {
store : getStore()
}
}
render() {
return (
<Provider store={this.state.store} >
<AppStack /> . // This is your React Navigation Stack.
</Provider>
);
}
}
你getStore
应该看起来像这样:
import { createStore } from 'redux';
import reducers from './reducers';
export default function getStore () {
const enhancer = compose(
applyMiddleware(
//your middlewares here..
)
);
const store = createStore(reducers);
return store;
}
AppStack 看起来像这样:
import {createStackNavigator} from 'react-navigation';
import FirstScreen from './components/FirstScreen';
export default AppStack = createStackNavigator({
Screen1: {
screen: FirstScreen,
//other routes....
},
});
这只是一个最简单的可能示例。
推荐阅读
- python - 适用于 Android 的 Python 网络浏览器
- sql - 如果值满足 Spark SQL 中的条件(版本 <= 2.4),如何返回键列表?)
- python - 无法读取标题中有空格的 Sharepoint 列表项
- python - 使用光线调谐时,配置中定义的值返回非浮点值
- c++ - 如何获取用于 SDL TTF 的 TTF 字体列表?
- excel - 错误使用电源查询附加,并使用映射表转换两个单独的文件
- c# - 上传Web客户端的进度信息异步上传不起作用c#
- reactjs - ReactJS,将类添加到一个按钮,而不是全部(在 .map 渲染中)
- javascript - 输入类型范围在 html2canvas 中不起作用
- javascript - 使用 CSS/JavaScript 实现双击控件