javascript - 如何从路由器访问组件方法

标签 javascript ajax reactjs

我正在执行 Ajax 请求,并以表格的形式呈现组件内的数据。从同一个组件中,我通过单击抓取数据(handleClick 函数抓取 id 数据),以便将其用于另一个组件内的另一个 Ajax 请求。我从 React-Router 中调用所有组件。问题是我需要单击的信息将其用作我在执行路由的组件内执行的调用的属性。有没有办法从那里访问它?

CompTable组件呈现一个数据表。

var CompTable = React.createClass({

 propTypes: {
  compData:   React.PropTypes.array.isRequired
 },

 getInitialState: function() {
  return {id: ''};
 },

 handleClick: function(e) {
  this.setState({id:e})
 },

 render: function() {

  var list = this.props.compData.map(function (comp, i) {
   return (
    <tr key={i+1}>
     <th scope="row">{i+1}</th>
      <td className={comp.id} onClick={this.handleClick.bind(this, comp.id)}> <Link to={'/competitions/'+comp.league}> {comp.caption} </Link></td>
      <td>{comp.league}</td>
      <td>{comp.numberOfTeams}</td>
     </tr>
    );
   }, this);

这是路由组件:

var app = document.getElementById('app');

var TeamsWrapper = React.createClass({
 render: function () {
  return (
   <div>
    <Teams id={CompTable.handleClick} />
   </div>
  );
 }
});

var CompetitionsWrapper = React.createClass({
 render: function () {
  return (
   <div>
    <Competitions source="http://api.football-data.org/v1/competitions/?season=2016" />
   </div>
  );
 }
});

ReactDOM.render(
 <Router history={browserHistory}>
  <Route path='/' component={Layout}>
   <IndexRoute component={Home}></IndexRoute>
   <Route path='/competitions' component={CompetitionsWrapper}></Route>
   <Route path='/competitions/:teamLeague' component={TeamsWrapper} ></Route>
  </Route>
 </Router>, app);

<Teams id={CompTable.handleClick} />不起作用。任何帮助将不胜感激。谢谢!

最佳答案

要实现这一点,您必须将状态移至解析路由的组件。 (您现在没有这样的顶级组件,因此您必须创建一个)在同一个组件中,您必须定义您的handleClick函数,然后您可以将其作为 Prop 传递到CompTable。

然后,当触发handleClick时,您可以在顶级组件中设置State,这样您就可以自由地传递所需的id以在API调用中使用它。

关于javascript - 如何从路由器访问组件方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41783888/

相关文章:

javascript - 如何将div高度设置为前两行

javascript - NodeJS 服务器更改 JSON 对象的键名

Ajax 调用 JSF 中禁用的组件

javascript - 如何测量 ajax 调用的进度?在 Php 中使用 jquery/ajax

javascript - 在将新项目添加到数据库后,如何使用 React hooks 更新 React 中的组件?

javascript - 从字符串生成最多 32 个字节的子字符串

javascript - 开发 Multi-Tenancy 应用程序,以便用户可以在同一浏览器中使用不同的选项卡在不同的组织中工作

javascript - 多个异步 ajax 调用 : How do I execute a function after ALL calls resolve even if some fail?

javascript - React Component 和 React Element 的区别

javascript - 在聊天容器上 react 自动滚动到底部