在 React.js 中调用外部组件方法

发布日期:2026-07-02 12:11:05   来源 : 杭州电子商务研究院    浏览量 :12
杭州电子商务研究院 发布日期:2026-07-02 12:11:05  
12

介绍

随着应用程序的增长,React.js 组件会变得越来越复杂。在大多数情况下,您将拥有嵌套组件(由其他组件调用的组件)。这些嵌套组件可能包含通过调用父组件中的方法来强制父组件中的状态更改的操作。在本指南中,我们将了解如何使用props作为传递和调用外部组件方法的手段。

设置

假设有两个组件,一个BannerMessage一个 EditorBannerMessage是一个维护一个名为message 的状态变量的组件:

      import React from 'react';
import Editor from './Editor';

export default class BannerMessage extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      message: ""
    }
  }

  updateMessage(message) {
    this.setState({
      message: message
    });
  }

  render() {
    return (
      <div>
        <h1>
          {this.state.message}
        </h1>
        <hr/>
        <Editor
          updateMessage={this.updateMessage.bind(this)}
        />
      </div>
    );
  }
}
    

注意,它包含一个名为updateMessage的方法,该方法接受一个消息值,该消息值将更新为组件的状态消息。在render()方法中,Editor与属性updateMessage一起安装,其值为this.updateMessage.bind(this)。调用.bind(this)将允许保留指向BannerMessage组件实例的this,即使它被传递给Editor

另一方面,编辑器如下所示:

      import React from 'react';

export default class Editor extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      message: ""
    }
  }

  handleMessageChanged(event) {
    this.setState({
      message: event.target.value
    });
  }

  render() {
    return (
      <div>
        <input type="text" value={this.state.message} onChange={this.handleMessageChanged.bind(this)} />
        <button>
          Save Message
        </button>
      </div>
    );
  }
}
    

该组件维护自己的状态消息,每次用户修改其输入元素的值时都会更新该消息。

调用外部组件的方法

编辑器中,创建一个方法,作为按钮被点击时的事件处理程序:

      handleButtonClicked() {
  this.props.updateMessage(this.state.message);
}
    

请注意,代码可以调用组件的props ,而组件又会调用updateMessage并在其状态中传递Editor消息值。在此上下文中对updateMessage的调用是由BannerMessage传递的:

      <Editor
  updateMessage={this.updateMessage.bind(this)}
/>
    

将事件处理程序附加到Editor中的按钮的onClick事件

      <button onClick={this.handleButtonClicked.bind(this)}>
  Save Message
</button>
    

当按钮被点击时,它将从组件的 props 中调用updateMessage ,它是对传递它的父级updateMessage ( BannerMessage )的引用

总体代码

最终代码应如下所示:

横幅信息

      import React from 'react';
import Editor from './Editor';

export default class BannerMessage extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      message: ""
    }
  }

  updateMessage(message) {
    this.setState({
      message: message
    });
  }

  render() {
    return (
      <div>
        <h1>
          {this.state.message}
        </h1>
        <hr/>
        <Editor
          updateMessage={this.updateMessage.bind(this)}
        />
      </div>
    );
  }
}
    

编辑

      import React from 'react';

export default class Editor extends React.Component {
  constructor(props) {
    super(props);

    this.state = {
      message: ""
    }
  }

  handleMessageChanged(event) {
    this.setState({
      message: event.target.value
    });
  }

  handleButtonClicked() {
    this.props.updateMessage(this.state.message);
  }

  render() {
    return (
      <div>
        <input type="text" value={this.state.message} onChange={this.handleMessageChanged.bind(this)} />
        <button onClick={this.handleButtonClicked.bind(this)}>
          Save Message
        </button>
      </div>
    );
  }
}
    

结论

props是 React.js 组件的一个特殊成员,它保存从另一个组件调用组件时传递的值。props的键声明为 HTML 属性,最终成为被调用组件内可访问的引用。一种这样的应用是将引用传递给调用组件的方法,以便由子组件调用,从而触发父级的逻辑。这将允许组件间通信,同时保持每个组件的状态独立性。为了练习,除了onClick事件外,尝试看看是否可以EditoronChange事件处理程序中挂接BannerMessageupdateMessage调用。这样,用户不必单击按钮,Editor就可以与BannerMessage通信

以上内容来自杭州电子商务研究院推送
关注
关于我们
热门推荐
合作伙伴
免责声明:本站部分资讯来源于网络,如有侵权请及时联系客服,我们将尽快处理
Copyright © 2025-2027 ToB产业网址导航 公安备案 浙公网安备33010602013138号 浙ICP备16025413号-9
支持 反馈 关注 数据