reactjs - 从 react 中的高阶组件调用实例方法

标签 reactjs

如果我有一个这样的类,其中包含 createDocument 方法:

class Sine extends Component {
  createDocument() {
    console.log('in createDocument');
  }

  render(el, props) {
    return (
        <div className="row">
          <div className="row">
            <h1>Sine Wave</h1>
            <div id="sine" ref="sine"/>
          </div>
        </div>
    );
  }
}

export default ResizeComponent(Sine);

我有一个像这样的高阶组件:

export var ResizeComponent = ComposedComponent  => class extends Component {
  componentDidMount() {
    this.createDocument();  // undefined
  }

  render() {
    return <ComposedComponent {...this.props}/>;
  }
};

如何从高阶组件包装的类中调用实例方法?

最佳答案

如果您想调用实例方法,只需为包装的组件创建一个 ref 回调并在那里访问它。

export var ResizeComponent = ComposedComponent  => class extends Component {
  onMounted(node) {
    node.createDocument();
  }
  render() {
    return <ComposedComponent
              ref={(node) => this.onMounted(node)}
              {...this.props}/>;
  }
};

但是,为了避免使用 refs,您还可以将 prop 传递给包装的 Sine 来决定是否要调用 createDocument() componentDidMount

关于reactjs - 从 react 中的高阶组件调用实例方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37583865/

相关文章:

reactjs - 如何向 React-Bootstrap 组件添加类名/id?

javascript - ReactJS:如何在 <div> 中居中对齐 Material-UI 的 <Table>?

javascript - 通过 webpack 构建的 Typescript 在 React 组件中使用 CSS 模块

reactjs - useLayoutEffect 中的 setState

javascript - 商店重新水化后无法使用 redux-persist 获取持久状态的值

reactjs - 处理从express到react的错误响应

javascript - 如何使用 React Router 将 div 放入 Switch 中?

javascript - 在 google-map-react 上动态添加标记

javascript - React - 检查元素在 DOM 中是否可见

reactjs - 如何在 create-react-app 中注入(inject)没有 REACT_APP 前缀的 dotenv 变量?