当前位置:首页 > React

react如何传值

2026-03-31 07:56:42React

React 传值方法

React 中组件间传值有多种方式,根据组件关系和场景选择合适的方法。

父组件向子组件传值(Props)

父组件通过属性(props)将数据传递给子组件。子组件通过 props 接收数据。

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

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

子组件向父组件传值(回调函数)

父组件通过 props 传递回调函数给子组件,子组件调用该函数将数据传回父组件。

react如何传值

// 父组件
function Parent() {
  const handleData = (data) => {
    console.log(data);
  };
  return <Child onData={handleData} />;
}

// 子组件
function Child({ onData }) {
  const data = "Hello from Child";
  return <button onClick={() => onData(data)}>Send Data</button>;
}

兄弟组件间传值(状态提升)

将共享状态提升到共同的父组件中,通过 props 传递给兄弟组件。

// 父组件
function Parent() {
  const [sharedData, setSharedData] = useState("");

  return (
    <>
      <SiblingA onData={setSharedData} />
      <SiblingB data={sharedData} />
    </>
  );
}

// 兄弟组件A
function SiblingA({ onData }) {
  const data = "Data from SiblingA";
  return <button onClick={() => onData(data)}>Send Data</button>;
}

// 兄弟组件B
function SiblingB({ data }) {
  return <div>{data}</div>;
}

跨层级组件传值(Context API)

使用 React.createContext 创建上下文,通过 Provider 提供数据,子组件通过 useContextConsumer 消费数据。

react如何传值

// 创建上下文
const DataContext = React.createContext();

// 父组件
function Parent() {
  const data = "Context Data";
  return (
    <DataContext.Provider value={data}>
      <Child />
    </DataContext.Provider>
  );
}

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

全局状态管理(Redux 或 Zustand)

对于复杂应用,可以使用状态管理库如 Redux 或 Zustand 进行全局状态管理。

// Redux 示例
import { useSelector, useDispatch } from "react-redux";

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

  const updateData = () => {
    dispatch({ type: "UPDATE_DATA", payload: "New Data" });
  };

  return (
    <div>
      <div>{data}</div>
      <button onClick={updateData}>Update Data</button>
    </div>
  );
}

路由传值(React Router)

通过路由参数或查询字符串传递数据。

// 路由参数
<Route path="/user/:id" component={User} />

// 组件中获取参数
function User({ match }) {
  const { id } = match.params;
  return <div>User ID: {id}</div>;
}

// 查询字符串
<Link to="/search?query=react">Search</Link>

// 组件中获取查询参数
function Search() {
  const query = new URLSearchParams(useLocation().search).get("query");
  return <div>Search Query: {query}</div>;
}

使用 Refs 传值

通过 useRefcreateRef 创建引用,直接访问 DOM 或组件实例。

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

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

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

// 子组件需要使用 forwardRef
const Child = forwardRef((props, ref) => {
  useImperativeHandle(ref, () => ({
    doSomething: () => {
      console.log("Child method called");
    },
  }));

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

标签: react
分享给朋友:

相关文章

如何同步react

如何同步react

同步React组件状态的方法 使用useState和useEffect钩子组合可以同步React组件的状态。useState用于声明状态变量,useEffect用于监听状态变化并执行副作用。 imp…

react如何分

react如何分

React 分页实现方法 在 React 中实现分页功能可以通过多种方式完成,以下是几种常见的方法: 使用状态管理分页数据 在组件内部维护当前页码和每页数据量的状态,通过计算切片数据实现分页。…

react 如何循环

react 如何循环

循环渲染列表 在React中,循环渲染列表通常使用map方法。map可以遍历数组并返回一个新的React元素数组。 const items = ['Apple', 'Banana', 'Orange…

react路由如何配置

react路由如何配置

React 路由配置方法 安装 React Router 使用 npm 或 yarn 安装 React Router 的 DOM 版本: npm install react-router-dom #…

react如何检测窗口

react如何检测窗口

监听窗口大小变化 使用useEffect钩子和resize事件监听窗口尺寸变化。在组件挂载时添加事件监听器,卸载时移除监听器以避免内存泄漏。 import { useState, useEffect…

如何部署react项目

如何部署react项目

部署 React 项目到生产环境 方法一:使用静态服务器部署(如 Nginx、Apache) 构建生产版本:运行 npm run build 或 yarn build,生成优化后的静态文件(位于 b…