高级前端react【Q611】React/Vue 中兄弟组件如何进行通信

React/Vue 中兄弟组件如何进行通信

Issue 欢迎在 Gtihub Issue 中回答此问题: Issue 629

Author 回答者: shfshanyue

见代码:React 中兄弟组件如何通信 - CodeSandbox

兄弟组件可通过 prop 与回调函数式的 prop 进行通信

import { useState } from "react";
import "./styles.css";
 
function One({ count, setCount }) {
  return (
    <div style={{ border: "1px solid red" }}>
      <h2>Conponent One</h2>
      <button onClick={() => setCount(count + 1)}>Click</button>
      <div>{count}</div>
    </div>
  );
}
 
function Two({ count, setCount }) {
  return (
    <div style={{ border: "1px solid red" }}>
      <h2>Conponent Two</h2>
      <button onClick={() => setCount(count + 1)}>Click</button>
      <div>{count}</div>
    </div>
  );
}
 
export default function App() {
  const [count, setCount] = useState(0);
  return (
    <div className="App">
      <One count={count} setCount={(c) => setCount(c)} />
      <Two count={count} setCount={(c) => setCount(c)} />
    </div>
  );
}

Author 回答者: feefeefee

vue

  1. 通过组件的实例用ref的方式去拿到组件的实例,然后再去拿到组件的数; a. 如果vue3使用setup语法糖的话,需要用defineExpose暴露出去数据;
  2. 使用vuex/pinia之类的库;
  3. 通过一个公有的父组件,然这个父组件当中间层去转发,通过props/emit之类的形式拿到下面子组件的数据,再去派发到另一个子组件;
  4. eventbus事件总线