【问题标题】:Best Navigation Solution for React-Native that works with Redux与 Redux 一起使用的 React-Native 最佳导航解决方案
【发布时间】:2018-09-16 21:06:58
【问题描述】:

似乎从 2018 年秋季开始,可能是 React-Native 最强大的导航解决方案的 React Navigation 正在放弃对 Redux 的支持。

警告:在 2018 年秋季发布的下一个主要版本的 React Navigation 中,我们将不再提供有关如何与 Redux 集成的任何信息,并且它可能会停止工作。发布在 React Navigation 问题跟踪器上的与 Redux 相关的问题将立即关闭。 Redux 集成可能会继续工作,但在为库做出任何设计决策时不会对其进行测试或考虑。


现在,有没有其他库可以与 React-Native + Redux 完美配合?

【问题讨论】:

    标签: react-native redux react-redux react-navigation


    【解决方案1】:

    它已经写好了here。您可以使用 react-navigation-redux-helpers 来传递您自己的导航道具。还要检查this 示例。

    以防上述链接被删除,以下是链接本身的步骤(复制)-

    分步指南

    以下步骤适用于 react-navigation@^2.3.0 和 react-navigation-redux-helpers@^2.0.0-beta。

    首先,您需要将 react-navigation-redux-helpers 包添加到您的项目中。

    yarn add react-navigation-redux-helpers
    

    npm install --save react-navigation-redux-helpers
    

    以下是如何在 Redux 应用程序中使用导航器的最小示例:

    import {
      createStackNavigator,
    } from 'react-navigation';
    import {
      createStore,
      applyMiddleware,
      combineReducers,
    } from 'redux';
    import {
      reduxifyNavigator,
      createReactNavigationReduxMiddleware,
      createNavigationReducer,
    } from 'react-navigation-redux-helpers';
    import { Provider, connect } from 'react-redux';
    import React from 'react';
    
    const AppNavigator = createStackNavigator(AppRouteConfigs);
    
    const navReducer = createNavigationReducer(AppNavigator);
    const appReducer = combineReducers({
      nav: navReducer,
      ...
    });
    
    // Note: createReactNavigationReduxMiddleware must be run before reduxifyNavigator
    const middleware = createReactNavigationReduxMiddleware(
      "root",
      state => state.nav,
    );
    
    const App = reduxifyNavigator(AppNavigator, "root");
    const mapStateToProps = (state) => ({
      state: state.nav,
    });
    const AppWithNavigationState = connect(mapStateToProps)(App);
    
    const store = createStore(
      appReducer,
      applyMiddleware(middleware),
    );
    
    class Root extends React.Component {
      render() {
        return (
          <Provider store={store}>
            <AppWithNavigationState />
          </Provider>
        );
      }
    }
    

    完成此操作后,您的导航状态将存储在您的 Redux 存储中,此时您可以使用 Redux 调度函数触发导航操作。

    请记住,当导航器获得导航道具时,它会放弃对其内部状态的控制。这意味着您现在负责保持其状态、处理任何深层链接、处理 Android 中的硬件返回按钮等。

    当您嵌套它们时,导航状态会自动从一个导航器传递到另一个导航器。请注意,为了让子导航器从父导航器接收状态,应将其定义为屏幕。

    将此应用于上面的示例,您可以改为定义 AppNavigator 以包含嵌套的 TabNavigator,如下所示:

    const AppNavigator = createStackNavigator({
      Home: { screen: MyTabNavigator },
    });
    

    在这种情况下,一旦您像在 AppWithNavigationState 中那样将 AppNavigator 连接到 Redux,MyTabNavigator 将自动访问导航状态作为导航属性。

    【讨论】:

    • 谢谢,我做了同样的事情并使用 react-navigation-redux-helpers 进行集成。一切正常。你能投票赞成这个问题吗?我想知道为什么它被否决了。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-08-14
    • 1970-01-01
    • 2018-06-10
    • 2022-01-02
    • 1970-01-01
    • 2017-07-19
    • 1970-01-01
    相关资源
    最近更新 更多