Sco*_*tty 9 javascript reactjs react-router redux
我有一个使用redux和react-router的通用反应应用程序.
我有几条路线如下:
/2016
/2015
/2014
/2013
Run Code Online (Sandbox Code Playgroud)
等等
每个路由都需要来自API的数据.目前,我有<Link>
导航组件中的元素调度异步操作onClick
,该操作使用来自该路由的API的数据填充存储.
对于MVP,我只是post: {}
在路由更改时使用新的帖子内容覆盖商店中的内容,这样我们就可以获得API上的任何新内容.
我已经意识到<Link>
按钮上的动作调度程序并不是最佳的,因为按下后退按钮不会重新触发动作调度以获取前一个路径的内容.
有没有办法让React Router在路由发生变化时随时触发调度操作?(限制它听一组特定的路线将是一个奖励).
我意识到我应该从商店获取历史记录,但是现在,通过触发操作调度以获取新内容,再次点击API会更容易.
干杯.
Mat*_*ara 12
在"生命周期"钩onEnter
和onChange
已经去掉阵营路由器4,这使得大多数其他的答案对这个问题不合时宜.
虽然我建议您使用组件生命周期方法来实现您的目标,但这里是您在React-router 4上运行的问题的答案.
今天有用的是使用由React路由器自己的开发人员创建的历史库来监听历史更改,并从那里调度异步操作.
// history.js
import createHistory from "history/createBrowserHistory"
const history = createHistory()
// Get the current location.
const location = history.location
// Listen for changes to the current location.
const unlisten = history.listen((location, action) => {
//Do your logic here and dispatch if needed
})
export default history
Run Code Online (Sandbox Code Playgroud)
然后在应用程序中导入历史记录
// App.js
import { Router, Route } from 'react-router-dom';
import Home from './components/Home';
import Login from './components/Login';
import history from './history';
class App extends Component {
render() {
return (
<Router history={history}>
<div>
<Route exact path="/" component={Home} />
<Route path="/login" component={Login} />
</div>
</Router>
)
}
}
Run Code Online (Sandbox Code Playgroud)
来源:历史库 React路由器文档
是的React Router有onEnter和onLeave挂钩.您可以构建路由以获取store
实例,因此您可以在这些帮助程序中访问它:
const createRoutes = (store) => {
const fetchPosts = () => store.dispatch({
types: ['FETCH_POSTS', 'FETCH_POSTS_SUCCESS', 'FETCH_POSTS_FAIL',
url: '/posts'
});
return (
<Route path="/" component={App}>
<Route path="posts" component={PostList} onEnter={fetchPosts}/>
<Route path="posts/:id" component={PostDetail} />
</Route>
)
}
Run Code Online (Sandbox Code Playgroud)
更好的方法是使用类似redial
或redux-async-connect
.这允许您将组件的数据依赖性与组件共同定位,同时保留在不触及网络的情况下测试组件的能力.
编辑:这适用于旧的,不再受支持的版本react-router
.
归档时间: |
|
查看次数: |
9227 次 |
最近记录: |