使用React 16和React Router 4将matchRoute设置为redux存储

时间:2018-07-14 16:19:32

标签: reactjs react-redux react-router-v4

我如何设置反应路由器道具来存储?我需要thunk函数中的此道具,然后才能在App.js组件中调用componentDidUpdate。 较早的React <16我可以在componentWillReceiveProps中做到这一点,例如:

componentWillReceiveProps(nextProps) {
  if (this.props.location.pathname !== nextProps.location.pathname) {
       ...
       nextProps.props.setRoute(routeParams);
    }
}

现在我看到了两种解决方案

  1. 所有动作创建者(setNewRoutes)在getDerivedStateFromProps中。一世 认为这是一个不好的选择。
  2. 制作一些类似的内容:
class RouteFetcher extends Component {
  constructor(props) {
    super(props);

    ...
    props.setRoute(routeParams);
  }

  componentDidUpdate(prevProps) {
    if (this.props.location.pathname !== prevProps.location.pathname) {
       ...
       nextProps.props.setRoute(routeParams);
    }
  }

  render() {
    return null;
  }
}

并将其放入App.js组件

  <BrowserRouter>
    <React.Fragment>
      <RouteFetcher />
       <Switch>
        {configRoutes.map(props => <Route key={props.name} {...props} />)}
       </Switch>
    </React.Fragment>
  </BrowserRouter>

任何人都曾经遇到过这种情况。我该怎么办?

0 个答案:

没有答案