首頁  >  文章  >  web前端  >  ReactJS 元件如何有效地相互通訊?

ReactJS 元件如何有效地相互通訊?

Patricia Arquette
Patricia Arquette原創
2024-11-19 06:54:03956瀏覽

How Do ReactJS Components Effectively Communicate with Each Other?

ReactJS 中的元件如何相互互動?

在 ReactJS 中建立應用程式時,經常會遇到需要多個元件的場景互動和傳達資料或事件。這可能會導致如何最好地促進這些互動的問題。

組件通訊方法

方法的選擇取決於組件的關係和層次結構:

  • 場景1111 :過濾器-> List

    在此場景中,Filters元件是 List 元件的子元件。 List 元件可以將處理函數傳遞給 Filters 元件。當過濾器輸入變更時,可以呼叫處理程序以使用新的過濾器值更新清單的狀態。

  • 場景2:父級->過濾器和列表

    當過濾器和列表都是共同父級的子級時,父級可以處理通信。它可以維護過濾器的狀態並將最新值傳遞給過濾器和清單。

  • 場景 3:獨立元件

    對於下列元件:由於缺乏父子關係,React 建議使用全域事件系統。這可以透過使用 componentDidMount() 方法新增事件監聽器和使用 componentWillUnmount() 方法刪除事件監聽器來實現。

程式碼範例

場景1(濾網-> 清單)

// Filters.js
handleChange = () => {
  const value = this.input.value;
  this.props.updateFilter(value);
};

// List.js
handleFilterChange = (value) => this.setState({ filter: value });
<Filters onChange={this.handleFilterChange} />

場景2(父級->過濾器和列表)

// Parent.js
filterChange = (value) => this.setState({ filter: value });

// Filters.js
render() {
  const { filter, updateFilter } = this.props;
  return <input value={filter} onChange={updateFilter} />;
}

// List.js
render() {
  const { filter, items } = this.props;
  return <ul>{items.filter(item => item.includes(filter)).map(...)}</ul>;
}

場景3(全域事件系統)

// GlobalEventEmitter.js
events = {};
on = (event, cb) => events[event] ? events[event].push(cb) : events[event] = [cb];
emit = (event, ...args) => events[event] ? events[event].forEach(cb => cb(...args)) : null;

// ComponentA.js
emit("customEvent", { ... });
componentDidMount() {
  on("customEvent", (payload) => this.setState({ ...payload }));
}

// ComponentB.js
emit("customEvent", { ... });
componentDidMount() {
  on("customEvent", (payload) => this.setState({ ...payload }));
}

以上是ReactJS 元件如何有效地相互通訊?的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn