当前位置:首页 > React

react如何完成组件通信

2026-01-25 10:46:35React

父子组件通信

父组件通过props向子组件传递数据。子组件通过调用父组件传递的回调函数与父组件通信。

// 父组件
function Parent() {
  const [data, setData] = useState('initial data');

  const handleChildClick = (newData) => {
    setData(newData);
  };

  return <Child data={data} onClick={handleChildClick} />;
}

// 子组件
function Child({ data, onClick }) {
  return (
    <button onClick={() => onClick('updated data')}>
      {data}
    </button>
  );
}

子父组件通信

子组件通过调用父组件传递的回调函数将数据传递回父组件。父组件可以更新自己的状态或执行其他操作。

兄弟组件通信

通过将共享状态提升到最近的共同父组件中实现兄弟组件间的通信。父组件管理状态并通过props分发给各个子组件。

react如何完成组件通信

function Parent() {
  const [sharedState, setSharedState] = useState('');

  return (
    <>
      <SiblingA 
        state={sharedState} 
        setState={setSharedState} 
      />
      <SiblingB 
        state={sharedState} 
        setState={setSharedState} 
      />
    </>
  );
}

Context API

对于跨多级组件的数据共享,使用Context API避免props层层传递。创建Context后,Provider提供数据,Consumer或useContext钩子消费数据。

const MyContext = createContext();

function App() {
  return (
    <MyContext.Provider value="shared value">
      <ComponentA />
    </MyContext.Provider>
  );
}

function ComponentA() {
  const value = useContext(MyContext);
  return <div>{value}</div>;
}

状态管理库

对于复杂应用状态管理,可使用Redux、MobX等库。这些库提供集中式状态存储和可预测的状态更新机制。

react如何完成组件通信

// Redux示例
const store = createStore(reducer);

function Component() {
  const state = useSelector(state => state.value);
  const dispatch = useDispatch();

  return (
    <button onClick={() => dispatch({ type: 'INCREMENT' })}>
      {state}
    </button>
  );
}

事件总线/发布订阅

创建全局事件系统,组件通过订阅和发布事件进行通信。适用于松散耦合的组件间通信。

const EventBus = new EventEmitter();

function ComponentA() {
  useEffect(() => {
    EventBus.emit('event', 'data');
  }, []);
}

function ComponentB() {
  const [data, setData] = useState('');

  useEffect(() => {
    EventBus.on('event', setData);
    return () => EventBus.off('event', setData);
  }, []);

  return <div>{data}</div>;
}

Refs与实例方法

通过ref获取组件实例并调用其方法。适用于需要直接访问子组件的情况。

function Parent() {
  const childRef = useRef();

  const handleClick = () => {
    childRef.current.doSomething();
  };

  return (
    <>
      <Child ref={childRef} />
      <button onClick={handleClick}>Call Child Method</button>
    </>
  );
}

const Child = forwardRef((props, ref) => {
  useImperativeHandle(ref, () => ({
    doSomething: () => console.log('Child method called')
  }));

  return <div>Child Component</div>;
});

标签: 组件通信
分享给朋友:

相关文章

vue实现udp通信

vue实现udp通信

Vue 中实现 UDP 通信的方法 由于浏览器环境的安全限制,JavaScript 无法直接通过 Web API 实现 UDP 通信。但可以通过以下方法间接实现: 使用 WebSocket 中转 在…

vue表格组件实现

vue表格组件实现

Vue表格组件实现 基础表格实现 使用el-table组件实现基础表格功能。安装Element UI后,引入el-table和el-table-column组件。 <template>…

vue 组件实现 遮罩

vue 组件实现 遮罩

Vue 组件实现遮罩层的方法 基础遮罩层实现 创建一个简单的遮罩层组件,使用绝对定位覆盖整个视口。以下是一个基础实现: <template> <div class="mask"…

vue组件实现vmodel

vue组件实现vmodel

Vue 组件实现 v-model 在 Vue 中,v-model 是双向数据绑定的语法糖,默认情况下绑定 value 属性并监听 input 事件。在自定义组件中实现 v-model 需要正确配置 p…

react如何引入组件

react如何引入组件

引入组件的常见方法 直接导入组件文件 通过import语句从指定路径引入组件文件,适用于项目内自定义组件。假设组件文件位于./components/Button.js: import Button…

vue实现高阶组件

vue实现高阶组件

Vue 高阶组件实现方法 高阶组件(HOC)是一种复用组件逻辑的模式,通过函数包裹组件并返回新组件实现。Vue 中可通过以下方式实现: 使用 render 函数 通过函数接收组件选项并返回新组件选项…