Javascript 如何在React.js中使用out flux在组件之间进行通信

Javascript 如何在React.js中使用out flux在组件之间进行通信,javascript,reactjs,Javascript,Reactjs,好的,我确实知道通过refs父母和孩子之间的沟通,或者使用this.props.onClick={this.props.onClick},我陷入了祖父母和孩子之间的沟通中,就像这样: var BlogTitle = React.createClass({ render: function() { return <li onClick={this.handleTitleClick}>{this.props.blog.title}</li> },

好的,我确实知道通过
refs
父母和孩子之间的沟通,或者使用
this.props.onClick={this.props.onClick}
,我陷入了祖父母和孩子之间的沟通中,就像这样:

var BlogTitle = React.createClass({
  render: function() {
    return
      <li onClick={this.handleTitleClick}>{this.props.blog.title}</li>
  },

  handleTitleClick: function() {
      this.props.onBlogTitleSelection(this.props.blog);
  }
});

var BlogTitles = React.createClass({
  render: function() {
    return 
      <ul>
        {this.state.blogs.map}
          <BlogTitle blog={blog} onBlogTitleSelection={this.props.onBlogTitleSelection} />
  }
})

var BlogAdmin = React.createClass({
  selectBlogTitle: function(blog) {
    // act!
  },

  render: function() {
    return 
      <BlogTitles onBlogTitleSelection={this.selectBlogTitle} />
      <BlogContent />
  }
})
说我们有一些博客,一旦我们点击一个博客标题,相应的博客内容就会显示出来,所以我们创建了三个组件:BlogAdmin、blogtile和blog(这里我们只关注BlogAdmin和blogtile)

单击BlogTitle时,我想通知BlogAdmin设置currentblog以指定blog。但是我被困在如何传递数据和如何触发事件上,最好不用使用pubSub

下面是我的示例,我删除了一些get/set数据和语法,使之更清晰

var BlogTitle = React.createClass({
  render: function() {
    return
      <li>{this.props.blog.title}</li>
  }
});

var BlogTitles = React.createClass({
  render: function() {
    return 
      <ul>
        {this.state.blogs.map}
          <BlogTitle blog={blog} />
  }
})

var BlogAdmin = React.createClass({
  render: function() {
    return 
      <BlogTitles />
      <BlogContent />
  }
})
var blogtTitle=React.createClass({
render:function(){
返回
  • {this.props.blog.title}
  • } }); var BlogTitles=React.createClass({ render:function(){ 返回
      {this.state.blogs.map} } }) var BlogAdmin=React.createClass({ render:function(){ 返回 } })
    简单的解决方案是添加一个回调函数,并将其向下发送,如下所示:

    var BlogTitle = React.createClass({
      render: function() {
        return
          <li onClick={this.handleTitleClick}>{this.props.blog.title}</li>
      },
    
      handleTitleClick: function() {
          this.props.onBlogTitleSelection(this.props.blog);
      }
    });
    
    var BlogTitles = React.createClass({
      render: function() {
        return 
          <ul>
            {this.state.blogs.map}
              <BlogTitle blog={blog} onBlogTitleSelection={this.props.onBlogTitleSelection} />
      }
    })
    
    var BlogAdmin = React.createClass({
      selectBlogTitle: function(blog) {
        // act!
      },
    
      render: function() {
        return 
          <BlogTitles onBlogTitleSelection={this.selectBlogTitle} />
          <BlogContent />
      }
    })
    
    var blogtTitle=React.createClass({
    render:function(){
    返回
    
  • {this.props.blog.title}
  • }, handleTitleClick:函数(){ this.props.onBlogTitleSelection(this.props.blog); } }); var BlogTitles=React.createClass({ render:function(){ 返回
      {this.state.blogs.map} } }) var BlogAdmin=React.createClass({ 选择博客标题:功能(博客){ //表演! }, render:function(){ 返回 } })
    简单的解决方案是添加一个回调函数,并将其向下发送,如下所示:

    var BlogTitle = React.createClass({
      render: function() {
        return
          <li onClick={this.handleTitleClick}>{this.props.blog.title}</li>
      },
    
      handleTitleClick: function() {
          this.props.onBlogTitleSelection(this.props.blog);
      }
    });
    
    var BlogTitles = React.createClass({
      render: function() {
        return 
          <ul>
            {this.state.blogs.map}
              <BlogTitle blog={blog} onBlogTitleSelection={this.props.onBlogTitleSelection} />
      }
    })
    
    var BlogAdmin = React.createClass({
      selectBlogTitle: function(blog) {
        // act!
      },
    
      render: function() {
        return 
          <BlogTitles onBlogTitleSelection={this.selectBlogTitle} />
          <BlogContent />
      }
    })
    
    var blogtTitle=React.createClass({
    render:function(){
    返回
    
  • {this.props.blog.title}
  • }, handleTitleClick:函数(){ this.props.onBlogTitleSelection(this.props.blog); } }); var BlogTitles=React.createClass({ render:function(){ 返回
      {this.state.blogs.map} } }) var BlogAdmin=React.createClass({ 选择博客标题:功能(博客){ //表演! }, render:function(){ 返回 } })
    简单的解决方案是添加一个回调函数,并将其向下发送,如下所示:

    var BlogTitle = React.createClass({
      render: function() {
        return
          <li onClick={this.handleTitleClick}>{this.props.blog.title}</li>
      },
    
      handleTitleClick: function() {
          this.props.onBlogTitleSelection(this.props.blog);
      }
    });
    
    var BlogTitles = React.createClass({
      render: function() {
        return 
          <ul>
            {this.state.blogs.map}
              <BlogTitle blog={blog} onBlogTitleSelection={this.props.onBlogTitleSelection} />
      }
    })
    
    var BlogAdmin = React.createClass({
      selectBlogTitle: function(blog) {
        // act!
      },
    
      render: function() {
        return 
          <BlogTitles onBlogTitleSelection={this.selectBlogTitle} />
          <BlogContent />
      }
    })
    
    var blogtTitle=React.createClass({
    render:function(){
    返回
    
  • {this.props.blog.title}
  • }, handleTitleClick:函数(){ this.props.onBlogTitleSelection(this.props.blog); } }); var BlogTitles=React.createClass({ render:function(){ 返回
      {this.state.blogs.map} } }) var BlogAdmin=React.createClass({ 选择博客标题:功能(博客){ //表演! }, render:function(){ 返回 } })
    简单的解决方案是添加一个回调函数,并将其向下发送,如下所示:

    var BlogTitle = React.createClass({
      render: function() {
        return
          <li onClick={this.handleTitleClick}>{this.props.blog.title}</li>
      },
    
      handleTitleClick: function() {
          this.props.onBlogTitleSelection(this.props.blog);
      }
    });
    
    var BlogTitles = React.createClass({
      render: function() {
        return 
          <ul>
            {this.state.blogs.map}
              <BlogTitle blog={blog} onBlogTitleSelection={this.props.onBlogTitleSelection} />
      }
    })
    
    var BlogAdmin = React.createClass({
      selectBlogTitle: function(blog) {
        // act!
      },
    
      render: function() {
        return 
          <BlogTitles onBlogTitleSelection={this.selectBlogTitle} />
          <BlogContent />
      }
    })
    
    var blogtTitle=React.createClass({
    render:function(){
    返回
    
  • {this.props.blog.title}
  • }, handleTitleClick:函数(){ this.props.onBlogTitleSelection(this.props.blog); } }); var BlogTitles=React.createClass({ render:function(){ 返回
      {this.state.blogs.map} } }) var BlogAdmin=React.createClass({ 选择博客标题:功能(博客){ //表演! }, render:function(){ 返回 } })
    这个解决方案是正确的,但我必须指出,在函数调用上绑定元素意味着要在函数的返回值上绑定click处理程序。这意味着,onClick处理程序将在应用程序启动时触发,并且永远不会被调用。我找到了一种通过
    ref
    传递数据的方法,在循环中,您可以使用'ref=item+blog.id'指定每个项目@克拉姆特林:这是一个很容易犯的错误,我想这只是答案中的一个错误。我编辑了代码来纠正这个问题。@BinaryMuse如果简单的错误造成了所有的不同,那么现在请仔细看看并思考数据是如何传输的。这个解决方案是正确的,但我必须指出,在函数调用上绑定元素意味着要在函数的返回值上绑定单击处理程序。这意味着,onClick处理程序将在应用程序启动时触发,并且永远不会被调用。我找到了一种通过
    ref
    传递数据的方法,在循环中,您可以使用'ref=item+blog.id'指定每个项目@克拉姆特林:这是一个很容易犯的错误,我想这只是答案中的一个错误。我编辑了代码来纠正这个问题。@BinaryMuse如果简单的错误造成了所有的不同,那么现在请仔细看看并思考数据是如何传输的。这个解决方案是正确的,但我必须指出,在函数调用上绑定元素意味着要在函数的返回值上绑定单击处理程序。这意味着,onClick处理程序将在应用程序启动时触发,并且永远不会被调用。我找到了一种通过
    ref
    传递数据的方法,在循环中,您可以使用'ref=item+blog.id'指定每个项目@克拉姆特林:这是一个很容易犯的错误,我想这只是答案中的一个错误。我编辑了代码来纠正这个问题。@BinaryMuse如果简单的错误造成了所有的不同,那么现在请仔细看看并思考数据是如何传输的。这个解决方案是正确的,但我必须指出,在函数调用上绑定元素意味着要在函数的返回值上绑定单击处理程序。这意味着,onClick处理程序将在应用程序启动时触发,并且永远不会被调用。我找到了一种通过
    ref
    传递数据的方法,在循环中,您可以使用'ref=item+blog.id'指定每个项目@klamtlne这是一个很容易犯的错误,我认为