当前位置: 首页 > 面试题库 >

React Router + Redux-在路由更改时分派异步操作?

范云
2023-03-14
问题内容

我有一个使用redux和react-router的通用react应用程序。

我有以下几种路线:

/2016
/2015
/2014
/2013

等等

每个路由都需要来自API的数据。目前,我<Link>在Navigation组件中的元素调度了一个async action
onClick,该操作使用来自该路线的API中的数据填充商店。

对于MVP,我只是post: {}在路线更改时用新的帖子内容覆盖商店中的内容,这样我们就可以获取API上的所有新内容。

我已经意识到在<Link>按钮上设置动作分派器并不是最佳选择,因为单击后退按钮不会重新触发动作分派器以获取上一条路线的内容。

有没有一种方法可以使React Router在发生路线更改时触发调度动作?(将其限制为侦听一组特定的路线将是一个奖励)。

我意识到我应该从商店中获取历史记录,但就目前而言,通过触发操作分派 以获取新内容 更容易再次击中API 。

干杯。


问题答案:

在“生命周期”钩onEnteronChange在已被删除阵营路由器4,这使得大多数其他的答案对这个问题过时出。

虽然我建议您使用组件 生命周期方法 来实现目标,但这是您的问题的答案,该问题适用于React-router 4。

今天有效的方法是使用由React路由器开发人员自己创建的History库监听历史更改,并从那里分发异步操作。

// 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

然后将历史记录导入您的html" target="_blank">应用程序

// 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>
    )
  }
}

来源:历史库 React
Router文档



 类似资料:
  • 英文原文: http://emberjs.com/guides/routing/asynchronous-routing/ 本节内容主要介绍一些路由的高级特性,以及路由是如何处理应用中的一些复杂异步逻辑的。 承诺简介 Ember在路由中处理异步逻辑的方案主要依赖于承诺(Promise)。简单地说,承诺就是代表了最后的值的对象。承诺可以被履行(成功的获得了最后的结果)也可以被拒绝(没有获得最后的结果

  • 我想改变菜单的状态,当路由改变,但不能使它工作。 我面临的问题是:当我点击Navbar中的链接时。路线改变了,但它不会关闭。当路线更改时,如何更改菜单状态?react-router-redux能帮我吗? 行动 减速器 组件 子组件

  • Ember.js路由器能够使用异步路由处理应用程序中的复杂异步逻辑。 下面给出的表显示了路由器中处理异步逻辑的不同类型 - S.No. 异步路由器和描述 1 路由器暂停承诺 可以通过从模型钩子返回promise来暂停转换。 2 当Promises拒绝 如果在转换期间模型拒绝承诺,则将中止转换。 3 Recovering from Rejection 从中止的过渡中恢复。

  • 问题内容: Angular在路由上不提供任何授权/访问权限(我说的是默认的Angular路由1.x,而不是beta 2.0或UI路由)。但是我必须执行它。 我遇到的问题是我有一项服务,该服务调用服务器以提供此信息并返回承诺。但是,此数据仅获取一次,然后缓存在客户端上,但是仍然需要获取一次。 我现在想处理检查下一条路由是否定义了特定属性的事件。然后,该处理程序应使用我前面提到的服务获取该数据,并根据

  • 在标记为副本之前,请仔细阅读此内容,我向您保证,我已经阅读并尝试了每个人在stackoverflow和github上提出的关于此问题的所有建议。 我在我的应用程序中有一条路线,如下所示; route rendering呈现打开用户角色的组件,并基于该角色惰性加载正确的Routes组件,Routes组件呈现主页的开关。简化后,如下所示。 然后是路由组件 因此,问题是每当用户从/导航到/秒等...应用

  • 我在最新的应用程序中使用react router和redux,我面临着一些与基于当前url参数和查询所需状态更改相关的问题。 基本上,我有一个组件,需要在每次url更改时更新它的状态。状态是通过redux的道具传递给decorator的,就像这样 目前,我正在使用componentWillReceiveProps生命周期方法来响应来自react-router的url更改,因为当this.props