Skip to content

建立 2026-09-15 更新 2026-09-15

Props

Props(properties)是父元件傳給子元件的輸入,像函式參數。子元件用它們來渲染,不要修改收到的 props;要變的資料用 state

怎麼傳、怎麼接

父元件在標籤上寫屬性,子元件用參數接:

function UserCard({ name, role }) {
  return (
    <article>
      <h2>{name}</h2>
      <p>{role}</p>
    </article>
  );
}

function App() {
  return (
    <>
      <UserCard name="Ada" role="工程師" />
      <UserCard name="Lin" role="設計師" />
    </>
  );
}

name="Ada" 是字串。傳數字、布林、物件、函式時用大括號:count={3}active={true}onSave={handleSave}

也可以先組物件再展開,效果相同:

const user = { name: "Ada", role: "工程師" };
<UserCard {...user} />

初學時展開寫法較難追資料從哪來,能寫清楚屬性就先寫清楚。

children

標籤中間的內容會變成 props.children

function Panel({ title, children }) {
  return (
    <section>
      <h2>{title}</h2>
      {children}
    </section>
  );
}

<Panel title="公告">
  <p>系統將於午夜維護</p>
</Panel>

這就是卡片、版面、按鈕能包住任意內容的原因。

只往下流

資料預設由上往下UserCard 不能改 App 裡的變數;它若要通知上層(例如按下刪除),上層必須傳一個函式進來:

function UserCard({ name, onRemove }) {
  return (
    <article>
      <h2>{name}</h2>
      <button type="button" onClick={onRemove}>
        移除
      </button>
    </article>
  );
}

兩個兄弟元件要看同一份資料時,把 state 放到共同的父元件,見 提升 State

官方對照:Passing Props to a Component