You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React组件间传递对象类型props,如何避免重复书写props.data?

React对象类型Props传递优化方案

你可以通过以下几种方式避免重复书写props.data,同时优化对象类型props的传递逻辑:

基础写法:提前提取对象变量

不需要用到解构,只需要在组件逻辑开头统一提取一次data即可:

import React from "react";    

const Header = (props) => {
  // 仅赋值一次,后续直接使用data变量
  const data = props.data;
  return (
    <header>
      <div className="header-wrapper">
        <h1>{data.welcome}</h1>
        <h2>{data.title}</h2>
        <h3>{data.subtitle}</h3>
        <p>
          {data.author.firstName} {data.author.lastName}
        </p>
        </div>
    </header>
  );
};

export default Header;

方案1:参数解构提取props字段

你之前解构失败大概率是语法使用有误,正确的解构写法如下:

单层解构

直接在组件入参时解构出data对象:

import React from "react";    

const Header = ({ data }) => {
  // 直接使用data变量,无需再从props取
  const { welcome, title, subtitle, author } = data;
  const { firstName, lastName } = author;
  return (
    <header>
      <div className="header-wrapper">
        <h1>{welcome}</h1>
        <h2>{title}</h2>
        <h3>{subtitle}</h3>
        <p>
          {firstName} {lastName}
        </p>
        </div>
    </header>
  );
};

export default Header;

深层解构(一步到位)

可以直接在入参时完成所有层级的解构:

const Header = ({ 
  data: { 
    welcome, 
    title, 
    subtitle, 
    author: { firstName, lastName } 
  } 
}) => {
  // 直接使用解构出的所有变量即可
  return (
    <header>
      <div className="header-wrapper">
        <h1>{welcome}</h1>
        <h2>{title}</h2>
        <h3>{subtitle}</h3>
        <p>
          {firstName} {lastName}
        </p>
        </div>
    </header>
  );
};

方案2:传递时展开对象,去掉嵌套层级

在父组件传递props时直接展开data对象,将所有属性作为独立props传给子组件:

App.js修改:

return (
  <div className="app">
     {/* 展开data对象,直接传递所有内部属性 */}
     <Header {...data} />
  </div>
);

Header.js修改:

import React from "react";    

// 直接接收对应属性即可,无需再通过data访问
const Header = ({ welcome, title, subtitle, author }) => {
  const { firstName, lastName } = author;
  return (
    <header>
      <div className="header-wrapper">
        <h1>{welcome}</h1>
        <h2>{title}</h2>
        <h3>{subtitle}</h3>
        <p>
          {firstName} {lastName}
        </p>
        </div>
    </header>
  );
};

export default Header;

方案3:跨多层组件传递时用useContext

如果你的数据需要传递给多层嵌套的子组件,不想逐层传递props,可以使用React内置的useContextAPI做全局状态共享,你当前的父子组件直传场景不需要用到这个方案。

内容的提问来源于stack exchange,提问作者Phucq.ins

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.04 01:24:05