shfshanyue / Daily-Question

互联网大厂内推及大厂面经整理,并且每天一道面试题推送。每天五分钟,半年大厂中
https://q.shanyue.tech
4.92k stars 510 forks source link

【Q611】React/Vue 中兄弟组件如何进行通信 #629

Open shfshanyue opened 3 years ago

shfshanyue commented 3 years ago

见代码: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>
  );
}
feefeefee commented 1 year ago

vue

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