javascript - React Router 在哪里使用 AJAX

标签 javascript ajax reactjs react-router

我正在使用 React Router 开发一个项目,我在数据流方面遇到了一些问题。

在每个页面上都有一个获取组件数据的 AJAX 调用。我一直把它们放在 componentDidMount 中:

// Below code is written in ES6
componentDidMount(){
  $.get(someURL, (data)=>{
    this.setState({data:data})
  })
}

虽然这适用于初始加载,但当 url 更改时它不会再次调用(需要手动刷新)。我似乎找不到合适的 life cycle进行 AJAX 调用。

有人请告诉我在 React Router 中获取数据的正确方法。

最佳答案

经过一番搜索,this README最终解决问题。

文档中列出了 2 种解决方案:

  1. 使用 addHandlerKey={true} :

    <Route handler={User} path="/user/:userId" addHandlerKey={true} />

  2. 使用 componentWillReceiveProps而不是 componentDidMount .

    • 我最后两个都用了,componentDidMount对于初始负载,componentWillReceiveProps对于后续的。
    • 因为它们共享相同的代码,所以我创建了一个新函数 _updateState并在两个生命周期中调用它。

我现在的代码:

class Classes extends React.Component {
  componentDidMount(){ this._updateState() }
  componentWillReceiveProps(){ this._updateState() }
  _updateState(){
    $.get(/*Some URL*/, (data)=>{
      this.setState({data:data})
    })
  }
}

关于javascript - React Router 在哪里使用 AJAX,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30279786/

相关文章:

javascript - 如果 window.location 立即更改,浏览器是否会生成 AJAX

reactjs - Eslint 错误 : Missing parentheses around multilines JSX react/jsx-wrap-multilines

reactjs - 如何使用 React ref 聚焦和选择复选框?

javascript - 使用纯 JavaScript 用鼠标重新排序 div 列表

javascript - 如何禁用CKEditor自动添加标签 'a'

javascript - jQuery求div可以包含的字符串长度

jquery - MVC 主详细信息保存错误

javascript - window.opener 没有改变

javascript - 当异步设置为 true 时,JAVAFX Ajax 调用偶尔无法添加到请求正文

javascript - 如何从 React-router v 2.+ 中的 URL 获取参数