React Navigation

安装

npm install react-navigation @rematch/react-navigation

对于 @rematch/core@0.x 使用 @rematch/react-navigation@1.1.0

示例

参看一个例子

设置

使用Redux设置React-Navigation是一个多步骤过程。 希望这个插件简化了这个过程。

  1. 创建你的<Routes />,然后选择你的 initialRouteName 的名称。

// Routes.js
export default StackNavigator(
  {
    Landing: {
      screen: Screen.Landing,
    },
    Login: {
      screen: Screen.Login,
    },
    App: {
      screen: App,
    },
  },
  {
    initialRouteName: 'Landing',
  }
)

2. 传递 Routes initialRouteName 进入 createReactNavigationPlugin

3. 使用包含 navigation helpers 的插件来简化派发 Navigation action。

4. 只需传递 NavigationAction 选项即可。

如有必要,导入NavigationActions

Back Handler

使用react-navigation设置Android后退按钮处理的示例。

Selectors

你可能会发现将一些自定义selector添加到你的nav model是有帮助的。您可以通过创建一个nav model配置对象来轻松添加selector。这个例子将添加一个currentRouteName选择器:

将上面的 model 添加到您的Rematch配置中:

确保您的新 model 包含在您的init中:

当然,你还需要安装 Rematch Select 插件

现在你将有能力在你的app内调用select.nav.currentRouteName(state),参阅 Rematch Select 插件文档 以获取更多关于配置和使用的selector。

Immutable JS and other non-{ } Stores

如果您的 store 不是标准的Javascript对象{},那么您可能需要将 sliceState 配置传递给createReactNavigationPlugin。该函数获取状态并返回包含React Navigation对象的状态片段。它在Navigator中用于将 state 映射到其属性,并用于侦听 navigation state 更改的中间件。默认情况下使用state.nav,在大多数情况下它可以正常工作。

如果你的 store 是一个 Immutable JS 对象,你可能需要传递 sliceState: state => state.get('nav') 作为 createReactNavigationPlugin 的配置。这里有一个小例子:

在上面的例子中,你的 store 是一个Immutable JS对象。但是,商店的nav切片是标准的 JS 对象。我推荐这种方法,因为 React Navigation 导航器和 Redux 中间件期望导航状态是一个标准的 JS 对象。这是最高效的方法。另一种方法是将导航状态存储为不可变 JS 映射,每次导航器或中间件需要访问 Rematch 状态时都需要调用 fromJS() toJS(),这会导致性能下降。

Last updated