当前位置:首页 > React

react组件之间如何传值

2026-03-11 09:51:28React

父组件向子组件传值

通过 props 传递数据。父组件在子组件标签上定义属性,子组件通过 props 接收。

父组件示例:

function Parent() {
  const data = "Hello from Parent";
  return <Child message={data} />;
}

子组件示例:

function Child(props) {
  return <div>{props.message}</div>;
}

子组件向父组件传值

通过父组件传递的回调函数实现。父组件定义函数并通过 props 传递给子组件,子组件调用该函数并传参。

父组件示例:

function Parent() {
  const handleData = (data) => {
    console.log(data); // 接收子组件数据
  };
  return <Child onSendData={handleData} />;
}

子组件示例:

function Child({ onSendData }) {
  const data = "Hello from Child";
  return <button onClick={() => onSendData(data)}>Send</button>;
}

兄弟组件间传值

通过共同的父组件中转。将数据提升到父组件,再通过 props 分发给兄弟组件。

父组件示例:

function Parent() {
  const [sharedData, setSharedData] = useState("");
  return (
    <>
      <SiblingA onSendData={setSharedData} />
      <SiblingB data={sharedData} />
    </>
  );
}

跨层级组件传值

使用 Context API 或状态管理库(如 Redux)。

Context API 示例:

const DataContext = createContext();

function App() {
  const value = "Global Data";
  return (
    <DataContext.Provider value={value}>
      <Child />
    </DataContext.Provider>
  );
}

function Child() {
  const data = useContext(DataContext);
  return <div>{data}</div>;
}

通过状态管理库传值(如 Redux)

适用于复杂应用。通过全局 Store 管理状态,组件通过 useSelectoruseDispatch 读写数据。

示例:

// Store 中定义状态和 reducer
// 组件中调用 action 更新状态
import { useSelector, useDispatch } from 'react-redux';

function Component() {
  const data = useSelector(state => state.data);
  const dispatch = useDispatch();
  return (
    <button onClick={() => dispatch({ type: 'UPDATE_DATA', payload: 'New Data' })}>
      Update
    </button>
  );
}

通过 ref 传值

父组件通过 useRef 创建引用,传递给子组件直接访问 DOM 或实例方法。

示例:

react组件之间如何传值

function Parent() {
  const childRef = useRef();
  const handleClick = () => {
    childRef.current.doSomething(); // 调用子组件方法
  };
  return (
    <>
      <Child ref={childRef} />
      <button onClick={handleClick}>Trigger</button>
    </>
  );
}

const Child = forwardRef((props, ref) => {
  useImperativeHandle(ref, () => ({
    doSomething: () => console.log("Child method called")
  }));
  return <div>Child</div>;
});

标签: 组件react
分享给朋友:

相关文章

vue实现下拉刷新组件

vue实现下拉刷新组件

实现下拉刷新组件的核心思路 下拉刷新功能通常通过监听触摸事件、滚动位置和动画效果实现。Vue中可以利用自定义指令或封装组件完成,以下为两种常见实现方式。 基于自定义指令的实现 创建指令监听触摸事件,…

vue哪个组件实现动画

vue哪个组件实现动画

在Vue中实现动画效果,可以通过以下组件和方法实现: Vue内置动画组件 Vue提供了<transition>和<transition-group>两个内置组件,用于处理进入…

vue实现下拉刷新组件

vue实现下拉刷新组件

Vue 下拉刷新组件实现 核心思路 通过监听 touch 事件计算滑动距离,结合 CSS 过渡动画实现下拉效果,触发刷新回调。 基础实现步骤 监听 touch 事件 在组件 mounted 阶段绑定…

如何手写一个react

如何手写一个react

手写一个简单的 React 创建一个基础的 React 实现需要理解其核心概念:虚拟 DOM、组件、状态管理和渲染。以下是一个简化版的 React 实现。 创建虚拟 DOM 虚拟 DOM 是真实 D…

如何改造react

如何改造react

改造 React 项目的关键方法 分析当前项目结构 通过评估现有组件、状态管理和依赖项,明确需要改进的部分。使用工具如 webpack-bundle-analyzer 识别性能瓶颈。 升级 Reac…

react如何验证

react如何验证

表单验证方法 在React中验证表单数据通常使用以下几种方式: 内置HTML5验证 利用HTML5原生表单验证属性如required、pattern等,结合form.noValidate属性禁用浏览…