视频1 视频21 视频41 视频61 视频文章1 视频文章21 视频文章41 视频文章61 推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37 推荐39 推荐41 推荐43 推荐45 推荐47 推荐49 关键词1 关键词101 关键词201 关键词301 关键词401 关键词501 关键词601 关键词701 关键词801 关键词901 关键词1001 关键词1101 关键词1201 关键词1301 关键词1401 关键词1501 关键词1601 关键词1701 关键词1801 关键词1901 视频扩展1 视频扩展6 视频扩展11 视频扩展16 文章1 文章201 文章401 文章601 文章801 文章1001 资讯1 资讯501 资讯1001 资讯1501 标签1 标签501 标签1001 关键词1 关键词501 关键词1001 关键词1501 专题2001
react 兄弟组件如何调用对方的方法示例
2020-11-27 22:05:57 责编:小采
文档


最近有一个场景是Child2组件点击让Child1组件里面的state的值发生改变,Child1是一个公用组件,把里面的state值改为props传递,修改内容太多,容易出错,就想找其他的方法来解决兄弟组件调用方法问题,下面看代码:

Child1 是第一个子组件

class Child1 extends React.Component {
 constructor(props) {
 super(props);
 this.state = {
 text:'Child1'
 };
 }
 onChange=()=>{
 this.setState({
 text:'Child1 onChange'
 })
 }
 componentDidMount(){
 this.props.onRef&&this.props.onRef(this)
 }

 render() {
 return (
 <div>{this.state.text}</div>
 );
 }
}

是第二个子组件,和Child1是兄弟组件;

class Child2 extends React.Component {
 constructor(props) {
 super(props);
 this.state = {
 };
 }

 render() {
 return (
 <div onClick={this.props.onClick}>Child2</div>
 );
 }
}

home 父组件

class Home extends React.Component {

 constructor(props) {
 super(props);
 this.state = {
 };
 }
 onRef=(ref)=>{
 this.child1=ref;
 }

 render() {
 return (
 <div className="home">
 <Child1 onRef={this.onRef}/>
 <Child2 onClick={
 ()=>{
 this.child1.onChange&&this.child1.onChange()
 }
 } />
 </div>
 );
 }
}

分析

  • 第一步:在Child1组件的componentDidMount生命周期里面加上this.props.onRef(this),把Child1都传递给父组件,
  • 第二步父组件里面 <Child1 onRef={this.onRef}/> this.onRef方法为onRef=(ref)=>{this.child1=ref;};
  • 第三步 Child2组件触发一个事件的时候,就可以直接这样调用this.child1.onChange(),Child1组件里面就会直接调用onChange函数,修改text为Child1 onChange;
  • 到这里就可以实现调用兄弟组件,其实还是用父组件做了中间传递。

    下载本文
    显示全文
    专题