React 父组件调用子组件的方法

124 阅读1分钟

1:使用refs调用子组件的方法

refs提供一种直接访问组件实例或DOM元素的方法

// ChildComponent.js
class ChildComponent extends React.Component {
  doSomething = () => {
    console.log('Child method called');
  };

  render() {
    return <button onClick={this.doSomething}>Call Child Method</button>;
  }
}

// ParentComponent.js
class ParentComponent extends React.Component {
  callChildMethod = ref => {
    if (ref) {
      ref.current.doSomething();
    }
  };

  render() {
    return (
      <div>
        <ChildComponent ref={this.callChildMethod} />
      </div>
    );
  }
}

在ChildComponent中定义了一个方法doSomething。在ParentComponent中,我们通过ref属性将ChildComponent的实例引用传递给父组件的callChildMethod方法,然后调用该方法。

2:使用回调函数调用子组件的方法

通过props讲回调函数从父组件传递到子组件,子组件调用这个函数

// ChildComponent.js
class ChildComponent extends React.Component {
  render() {
    return <button onClick={() => this.props.onChildMethod()}>Call Child Method</button>;
  }
}

// ParentComponent.js
class ParentComponent extends React.Component {
  handleChildMethod = () => {
    console.log('Child method called from parent');
  };

  render() {
    return (
      <div>
        <ChildComponent onChildMethod={this.handleChildMethod} />
      </div>
    );
  }
}

ParentComponent通过onChildMethod prop将handleChildMethod方法传递给ChildComponent。当用户点击按钮时,ChildComponent会调用这个传递进来的方法。

3:使用上下文(Context)调用子组件的方法

React的Context API提供了一种在组件树中传递数据的方法,而不需要通过每个层级手动传递props。我们也可以使用Context来调用子组件的方法。

// Context.js
const MethodContext = React.createContext();

// ChildComponent.js
class ChildComponent extends React.Component {
  render() {
    return (
      <MethodContext.Consumer>
        {callParentMethod => (
          <button onClick={() => callParentMethod()}>Call Parent Method</button>
        )}
      </MethodContext.Consumer>
    );
  }
}

// ParentComponent.js
class ParentComponent extends React.Component {
  handleParentMethod = () => {
    console.log('Parent method called from child');
  };

  render() {
    return (
      <MethodContext.Provider value={this.handleParentMethod}>
        <ChildComponent />
      </MethodContext.Provider>
    );
  }
}

创建了一个MethodContext,并将handleParentMethod方法作为context value传递给ChildComponent。在子组件中,我们通过Consumer访问这个context value,并在点击按钮时调用这个方法。