
在 Day 6,我們開始建立第一個 React 元件,並透過 props 將父層元件的資料傳遞給子層元件。隨後,我們學習了 useState,了解了如何在元件內部管理資料,並透過 Functional Updater 函式更新 state。
今天我們來整理 Props 和 State,並更深入了解它們在 React 中的應用。
在 React 中,元件的資料來源可以分成兩類:
Props(屬性):由父層元件傳遞到子元件的資料。這是一種單向資料流,資料只能從父層傳遞到子層,子元件無法直接修改 props。因此,props 是穩定且不可變的資料來源,有助於元件之間的可預測性和可維護性。State(狀態):由元件自己管理的資料狀態。state 可以隨著使用者的操作或時間變化,由元件內部進行修改。當 state 改變時,React 會重新渲染元件,呈現最新的資料狀態。在 React 中,不論是 props 還是 state,都遵循單向資料流的原則,這使資料的變動來源清晰可見與易於理解。而 state 雖可以在元件內部被修改,React 建議使用 setState 函式來更新 state,確保每次修改都能正確觸發重新渲染。
| 特性 | State | Props | 共同點 |
|---|---|---|---|
| 定義 | 元件內部的狀態,隨時間或操作可改變 | 從父元件傳遞的資料,不可變 | 都是管理 React 元件資料的方式 |
| 傳遞方式 | 由元件內部自行管理 | 由父元件傳遞給子元件 | 都可用於子元件的資料傳遞 |
| 修改方式 | 可以由元件內部修改 | 無法在子元件內修改 | 修改資料都會影響元件的渲染 |
| 初始設定 | 可用 useState 設定初始值 |
由父元件在 JSX 標籤中傳遞初始值 | 都可用來存儲並傳遞資料 |
| 用於 | 管理元件的動態行為,如表單輸入、計數器等 | 在元件間傳遞資料 | 都可以是原始資料類型、物件、陣列或函數 |
| 影響渲染 | 改變 state 會觸發重新渲染 |
改變 props 會觸發重新渲染 |
影響元件渲染結果 |
props、state 或外部資料來源(如 API 回傳的資料)。state 和事件處理函式,影響 UI 呈現。
以下是一個簡單的 React 元件,展示了如何使用 props 和 state 來管理元件的資料:
import React from 'react';
function MyComponent(props) {
// Data: 使用 props 和 state
const { title } = props;
const [count, setCount] = React.useState(0);
// JavaScript: 更新函式
const incrementCount = () => {
setCount(count + 1); // 更新 state
};
// JSX: 描述 UI 結構
return (
<div>
<h1>{title}</h1>
<p>Current Count: {count}</p>
<button onClick={incrementCount}>Increment</button>
</div>
);
}
export default MyComponent;
在這個範例中:
props 是從父元件傳入的資料,這裡使用了 title 來顯示標題。state 則透過 useState 管理 count 變數,並且當按下按鈕時,incrementCount 函式會更新 count 並重新渲染元件。透過 props 和 state 的整理,比較兩者的差異與用途所在。在往後的選擇考量上,就能用適合的方式去選用。這兩者都是單向資料流的方式,一個是從父層傳來的資料,一個則是元件本身的資料。
本文將會同步更新到我的部落格