【问题标题】:React Router where to use AJAXReact Router 在哪里使用 AJAX
【发布时间】:2015-07-28 13:48:36
【问题描述】:

我正在使用React Router 处理一个项目,但我遇到了一些数据流问题。

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

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

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

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

【问题讨论】:

标签: javascript ajax reactjs react-router


【解决方案1】:

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

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

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

【讨论】:

  • 您可以在 componentWillMount lifeCycle 处理程序上触发 ajax
  • README 链接现已损坏。
猜你喜欢
  • 2018-02-11
  • 2016-12-24
  • 1970-01-01
  • 2016-11-02
  • 1970-01-01
  • 2019-10-20
  • 2017-07-30
  • 2017-05-22
  • 1970-01-01
相关资源
最近更新 更多