当前位置:首页 > React

react兄弟组件之间如何传值

2026-01-25 16:27:55React

兄弟组件传值方法

在React中,兄弟组件之间传值可以通过以下几种常见方式实现:

状态提升(Lifting State Up)

将共享状态提升到最近的共同父组件中,通过props传递给兄弟组件。父组件管理状态,子组件通过回调函数更新状态。

// 父组件
function Parent() {
  const [sharedState, setSharedState] = useState('');

  return (
    <>
      <ChildA value={sharedState} onChange={setSharedState} />
      <ChildB value={sharedState} />
    </>
  );
}

// 子组件A
function ChildA({ value, onChange }) {
  return <input value={value} onChange={(e) => onChange(e.target.value)} />;
}

// 子组件B
function ChildB({ value }) {
  return <div>{value}</div>;
}

使用Context API

当组件层级较深时,可以使用Context避免props逐层传递。

const MyContext = createContext();

function Parent() {
  const [value, setValue] = useState('');

  return (
    <MyContext.Provider value={{ value, setValue }}>
      <ChildA />
      <ChildB />
    </MyContext.Provider>
  );
}

function ChildA() {
  const { setValue } = useContext(MyContext);
  return <input onChange={(e) => setValue(e.target.value)} />;
}

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

使用状态管理库

对于复杂应用,可以使用Redux、MobX或Zustand等状态管理库。

// 使用Zustand示例
import create from 'zustand';

const useStore = create((set) => ({
  value: '',
  setValue: (newValue) => set({ value: newValue }),
}));

function ChildA() {
  const setValue = useStore((state) => state.setValue);
  return <input onChange={(e) => setValue(e.target.value)} />;
}

function ChildB() {
  const value = useStore((state) => state.value);
  return <div>{value}</div>;
}

使用自定义事件

通过事件总线或自定义事件实现通信(较少使用,可能带来维护问题)。

react兄弟组件之间如何传值

const EventEmitter = {
  events: {},
  emit(event, data) {
    if (!this.events[event]) return;
    this.events[event].forEach(callback => callback(data));
  },
  on(event, callback) {
    if (!this.events[event]) this.events[event] = [];
    this.events[event].push(callback);
  }
};

function ChildA() {
  return <input onChange={(e) => EventEmitter.emit('update', e.target.value)} />;
}

function ChildB() {
  const [value, setValue] = useState('');
  useEffect(() => {
    EventEmitter.on('update', setValue);
  }, []);
  return <div>{value}</div>;
}

选择方法时应考虑组件层级复杂度、应用规模和维护成本。状态提升适合简单场景,Context适合中等复杂度,状态管理库适合大型应用。

标签: 组件兄弟
分享给朋友:

相关文章

vue实现下拉框组件

vue实现下拉框组件

Vue 下拉框组件实现 基础实现 创建基础下拉框组件,使用v-model实现双向数据绑定: <template> <div class="dropdown"> &…

vue table组件实现

vue table组件实现

Vue 表格组件实现方案 基础表格实现 使用<table>标签结合v-for指令渲染数据是最简单的实现方式: <template> <table> &…

如何缓存react组件

如何缓存react组件

缓存React组件的方法 React.memo 使用React.memo对函数组件进行浅比较缓存,避免不必要的重新渲染。适用于props不变的场景。 const MemoizedComponen…

vue实现搜索组件

vue实现搜索组件

Vue 实现搜索组件的方法 基础搜索组件实现 创建基础搜索组件需要包含输入框和搜索按钮。在Vue中可以使用v-model绑定输入值,通过@click或@keyup.enter触发搜索。 <te…

vue实现轮播组件

vue实现轮播组件

使用Swiper实现轮播组件 Swiper是一个流行的开源轮播库,支持Vue集成。安装Swiper和Vue相关依赖: npm install swiper vue-awesome-swiper 引入…

vue组件实现返回

vue组件实现返回

实现返回功能的 Vue 组件方法 监听浏览器返回事件 通过 window.addEventListener('popstate', callback) 监听浏览器返回按钮事件,在回调函数中执行自定义逻…