React 应用中 Provider 和 Router 的顺序

Order of Provider and Router in React app

我正在使我的 React 应用程序成为 SPA,并向其中添加 React Router 4react-router-dom。目前,我的主页组件的入口点如下所示:

render (
    <Provider store={store}>
        <App>
            <Home />
        </App>
    </Provider>,
    document.getElementById('app')
);

对于另一个模块,我有一个不同的入口点,而不是 <Home /> 组件,我有一个不同的组件,但其余部分看起来几乎相同。

两个问题:

  1. <BrowserRouter> 应该包裹 <Provider store={store}> 还是相反?这有关系吗?看起来 react-router-dom 没有使用 redux 存储,但我仍然认为 <Provider> 应该包装 <BrowserRouter> -- 请参见下面的代码。
  2. 我还将 "Home" 组件移除,因为路由器将根据 URL 决定加载哪个组件。

这是新代码:

render (
    <Provider store={store}>
        <BrowserRouter>
            <App />
        </BrowserRouter>
    </Provider>,
    document.getElementById('app')
);

我处理得对吗?

类似于:

import React from 'react'
import { render } from 'react-dom'
import { Provider } from 'react-redux'
import { ConnectedRouter } from 'react-router-redux'
import store, { history } from './store'
import App from './app'

render(
  <Provider store={store}>
    <ConnectedRouter history={history}>
      <div>
        <App />
      </div>
    </ConnectedRouter>
  </Provider>,
  document.querySelector('#root')
)

没关系

他们互不依赖

看看他们的实现,特别是他们的渲染方法。

Redux Provider, React Router.

他们大多只是声明几个 contextTypes,然后渲染子节点。