【问题标题】:The navigation reducer is not called while navigating导航时不调用导航减速器
【发布时间】:2018-02-22 14:56:06
【问题描述】:

我正在尝试使用reactnavigation 实现嵌套导航我有一个减速器,如下所示:

import AppNavigation from '../Navigation/AppNavigation'

export const reducer = (state, action) => {
  const newState = AppNavigation.router.getStateForAction(action, state) 
  console.log("reducer is running")     
  return nextState || state;
}

我试图从一个屏幕导航到另一个屏幕

this.props.navigation.navigate('OrderPreviewAssigned')

我可以在控制台中看到调度操作,但减速器没有被触发。

控制台输出:

PS:我想要实现的原因是我想防止快速点击按钮时导航两次,所以我的计划是读取当前路线,如果路线与仅导航不同或者不要。

【问题讨论】:

  • 单击按钮时,禁用该按钮。这将阻止第二次点击做任何事情。
  • 你在哪里调用reducer?
  • @VamshiGudipati 减速器被称为 combineReducers。 reducer 有时会被调用。
  • @ChaseDeAnda 我可以禁用它,但按钮在列表视图中,因此无需跟踪所有。任何其他选项

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


【解决方案1】:

您似乎没有使用 React Navigation 正确设置 redux 集成。您需要像这样将状态和调度传递给主 AppNavigator:

import { addNavigationHelpers } from 'react-navigation';

const AppNavigator = StackNavigator(AppRouteConfigs);

class App extends React.Component {
  render() {
    return (
      <AppNavigator navigation={addNavigationHelpers({
        dispatch: this.props.dispatch,
        state: this.props.nav,
      })} />
    );
  }
}

请参阅 React Navigation 中的 Redux 集成文档以获取更多信息和一个工作示例:https://reactnavigation.org/docs/guides/redux

【讨论】:

  • 我已经这样做了。但它仍然无法正常工作。我正在使用 ignite 样板,它已经完成了。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-06-17
  • 2020-03-13
  • 1970-01-01
相关资源
最近更新 更多