【发布时间】:2019-04-28 15:54:41
【问题描述】:
我收到了错误,出于所有目的,我认为我不应该这样:)
流量是
客户 history.js > client/index.js > history = createBrowserHistory > <App history={history} />
服务器 history.js > server/index.js > history = createMemoryHistory > <App history={history} />
我可以确认服务器上正在使用内存,然后它会掉下来,所以我们永远无法到达BroswerHistory
server.js 中的错误
Invariant Violation: Browser history needs a DOM
30 |
31 | // Render the component to a string
> 32 | const markup = renderToString(
33 | <Provider store={store}>
34 | <App history={history} />
35 | </Provider>
history.js
import createBrowserHistory from 'history/createBrowserHistory'
import createMemoryHistory from 'history/createMemoryHistory'
let history
let createHistory
if (typeof document !== 'undefined') {
createHistory = createBrowserHistory
} else {
createHistory = createMemoryHistory
}
history = createHistory()
export default history
我已经检查并确保<BrowserRouter /> 也不是错误的地方。
routes.js
const routes = (
<Fragment>
<BrowserRouter>
<Switch>
<Route component={NoMatch} />
</Switch>
</BrowserRouter>
</Fragment>
)
export default routes
server.js
import history from '../common/history'
const store = configureStore(preloadedState, history)
// Render the component to a string
const markup = renderToString(
<Provider store={store}>
<App history={history} />
</Provider>
)
App.js
import React from 'react'
import PropTypes from 'prop-types'
import { ConnectedRouter } from 'connected-react-router'
import routes from '../routes'
const App = ({ history }) => {
return <ConnectedRouter history={history}>{routes}</ConnectedRouter>
}
App.propTypes = {
history: PropTypes.object
}
export default App
【问题讨论】:
-
您在哪里使用导出的
history对象?您不应该将它与Router一起使用而不是使用BrowserRouter吗?<Router history={history}> ... </Router> -
导出的
history在多个地方使用,server/index.js,client/index.js,然后通过这两个server/client文件作为道具传递给App.js -
好的。考虑将
<BrowserRouter>改为<Router history={history} />,看看是否可行。 -
你看到这个问题了吗?也许根本原因是相似的。 stackoverflow.com/questions/48649569/…
-
@Tholle 我正在使用
connected-react-router v5,只是作为注释。确实这有效:D请添加答案并简要说明原因(如果可能):D
标签: javascript reactjs redux react-router react-router-v4