反应路由器4 history.listen永远不会引发火灾
切换到路由器v4和历史记录v4.5.1,现在历史监听器不工作
import createBrowserHistory from 'history/createBrowserHistory'
const history = createBrowserHistory()
history.listen((location, action) => {
console.log(action, location.pathname, location.state) // <=== Never happens
})
render(
<Provider store={store}>
<Router history={history}>
...
</Router>
</Provider>,
document.getElementById('root')
)
任何想法为什么它被忽略?
由于您正在使用浏览器路由器(使用导入别名路由器,如问题的注释中所述),因此它不关心您传入的历史道具。而不是在内部创建并向路由器分配新的浏览器历史记录。 所以你在Router中使用的历史实例是不一样的。 这就是你的听众无法工作的原因。
导入原始路由器。
import { Router } from 'react-router-dom';
它会像你期望的那样工作。
问题是你正在创建自己的历史对象并将它传递给路由器。 但是,React Router v4已经通过this.props为您提供了这个对象。 (导入路由器与此无关)
componentDidMount() {
this.props.history.listen((location, action) => console.log('History changed!', location, action));
}
您可能需要为您的应用多添加一层,如下所示,并将此componentDidMount方法放在MyApp.jsx中,而不是直接放在最上层。
<Provider store={store}>
<BrowserRouter>
<MyApp/>
</BrowserRouter>
</Provider>
(或者如果您在使用React Native,则使用NativeRouter而不是BrowserRouter)
链接地址: http://www.djcxy.com/p/96319.html上一篇: React router 4 history.listen never fires
下一篇: Suddenly getting 403 (Forbidden) with Oauth 2.0 consent on YouTube V3 API