Javascript 为React中的父组件提供状态

Javascript 为React中的父组件提供状态,javascript,reactjs,Javascript,Reactjs,我知道您可以将React中的状态和道具从父组件传递到子组件,但是有没有相反的方法 例如: var Parent = React.createClass({ render: function() { return ( <div> <Child> {(childState) => { // render other 'grandchildren' here }}

我知道您可以将React中的状态和道具从父组件传递到子组件,但是有没有相反的方法

例如:

var Parent = React.createClass({
  render: function() {
    return (
      <div>
        <Child>
          {(childState) => {
             // render other 'grandchildren' here
          }}
        </Child>
      </div>
    );
  }
});
给定一些子组件:

var Child = React.createClass({

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

  componentDidMount: function(){
    this.setState({data: 'something'});
  },

  render: function() {
    return (
      <div>
        ...
      </div>
    );
  }

});
var Parent = React.createClass({

  render: function() {
    return (
      <div>
        <Child />
        ...
      </div>
    );
  }

});
给定一些父组件:

var Child = React.createClass({

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

  componentDidMount: function(){
    this.setState({data: 'something'});
  },

  render: function() {
    return (
      <div>
        ...
      </div>
    );
  }

});
var Parent = React.createClass({

  render: function() {
    return (
      <div>
        <Child />
        ...
      </div>
    );
  }

});
有什么方法可以让我从Child向Parent提供状态数据的值吗?

没有

但是是的。但是真的没有

在React中不能将任何内容从子级传递给父级。但是,有两种解决方案可以用来模拟这种传球

1将回调从父级传递给子级

var Parent = React.createClass({
  getInitialState: function() {
    return {
      names: []
    };
  },
  addName: function(name) {
    this.setState({
      names: this.state.names.push(name)
    });
  },
  render: function() {
    return (
      <Child 
        addName={this.addName}
      />
    );
  }
});

var Child = React.createClass({
  props: {
    addName: React.PropTypes.func.isRequired
  },
  handleAddName: function(event) {
    // This is a mock
    event.preventDefault();
    var name = event.target.value;
    this.props.addName(name);
  },
  render: function() {
    return (
      ...
        onClick={this.handleAddName}
      ...
    );
  }
});
第二个选项是通过使用一个样式的操作/存储系统(如或)来获得顶级状态。这些功能基本上与上述功能相同,但更为抽象,使得在更大的应用程序上实现这些功能非常简单。

但是是的。但是真的没有

在React中不能将任何内容从子级传递给父级。但是,有两种解决方案可以用来模拟这种传球

1将回调从父级传递给子级

var Parent = React.createClass({
  getInitialState: function() {
    return {
      names: []
    };
  },
  addName: function(name) {
    this.setState({
      names: this.state.names.push(name)
    });
  },
  render: function() {
    return (
      <Child 
        addName={this.addName}
      />
    );
  }
});

var Child = React.createClass({
  props: {
    addName: React.PropTypes.func.isRequired
  },
  handleAddName: function(event) {
    // This is a mock
    event.preventDefault();
    var name = event.target.value;
    this.props.addName(name);
  },
  render: function() {
    return (
      ...
        onClick={this.handleAddName}
      ...
    );
  }
});

第二个选项是通过使用一个样式的操作/存储系统(如或)来获得顶级状态。这些基本上与上述功能相同,但更为抽象,使得在更大的应用程序上实现这些功能非常容易。

实现这一点的一种方法是通过我最近介绍的“渲染道具”模式。请记住,this.props.children实际上只是一种将内容传递给组件的方法

例如:

var Parent = React.createClass({
  render: function() {
    return (
      <div>
        <Child>
          {(childState) => {
             // render other 'grandchildren' here
          }}
        </Child>
      </div>
    );
  }
});

这可能是最适合的情况下,是负责做一些事情,但并不真正关心的孩子,将提供在其位置。react培训人员使用的示例用于一个组件,该组件将从Github API获取,但允许父级真正控制使用这些结果呈现的内容/情况。

一种方法是通过我最近介绍的“呈现道具”模式。请记住,this.props.children实际上只是一种将内容传递给组件的方法

例如:

var Parent = React.createClass({
  render: function() {
    return (
      <div>
        <Child>
          {(childState) => {
             // render other 'grandchildren' here
          }}
        </Child>
      </div>
    );
  }
});

这可能是最适合的情况下,是负责做一些事情,但并不真正关心的孩子,将提供在其位置。react培训人员使用的示例用于一个组件,该组件将从Github API获取数据,但允许家长真正控制使用这些结果呈现的内容/情况。

非常感谢-我能够使用您的方法解决我的问题。非常感谢-我能够使用您的方法解决我的问题。