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

React组件接收props参数时为何需要使用花括号?

为什么React组件接收props时要用花括号包裹?

我搞不懂为什么组件接收props参数时需要用花括号包裹,请看下面的组件示例:Kid组件在参数中使用了花括号,能正常渲染;而Kid2未使用花括号,无法正常渲染。为什么必须使用花括号?

代码示例

// App.js
import "./styles.css";
import Kid from "./Kid";
import Kid2 from "./Kid2";

const person = { nombre: "Joe" };
export default function App() {
  return (
    <div className="App">
      <h1>In App Component</h1>
      <Kid person={person}></Kid>
      <Kid2 person={person}></Kid2>
    </div>
  );
}

// Kid.js
import "./styles.css";
// 参数中使用了花括号
export default function Kid({ person }) {
  return (
    <div className="SubComp">
      <h1>Name is: {person.nombre}</h1>
    </div>
  );
}

// Kid2.js
import "./styles.css";
// 参数中未使用花括号
export default function Kid2(person) {
  return (
    <div className="SubComp">
      <h1>Name is: {person.nombre}</h1>
    </div>
  );
}

原因解释

React组件的第一个参数是一个包含所有传入props的对象——不管你给组件传了多少个props,都会被统一打包进这个对象里。

  • Kid组件里的({ person })是ES6的对象解构语法,作用是直接从props对象中提取person属性,等价于:
    export default function Kid(props) {
      const person = props.person;
      return (
        <div className="SubComp">
          <h1>Name is: {person.nombre}</h1>
        </div>
      );
    }
    
  • 而Kid2组件里的person其实是整个props对象,你传入的person属性是这个对象的一个子属性,所以如果不用解构,正确写法应该是props.person.nombre,也就是:
    export default function Kid2(props) {
      return (
        <div className="SubComp">
          <h1>Name is: {props.person.nombre}</h1>
        </div>
      );
    }
    

简单来说:花括号不是React的强制要求,它是ES6的解构语法,用来简化从props对象中提取属性的操作,避免每次都写props.xxx。如果不用解构,你就必须直接使用整个props对象,通过点语法访问内部属性。

内容的提问来源于stack exchange,提问作者Luke

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.24 14:53:10