React PROPS

更新 發佈閱讀 8 分鐘

基本認識

  • Props 是組件的輸入參數,用於從父組件向子組件傳遞數據。
  • Props 是唯讀的,子組件無法直接修改它們。

首先創建以下檔案:

Welcome.jsx 程式碼:

function Welcome(props) {
return <h1>歡迎, {props.name}!</h1>;
}

export default Welcome;
  • 這個範例定義了一個接收 props 的簡單組件。

接下來,我們編輯App.jsx程式碼:

import Welcome from "./Welcome.jsx"

function App() {
return (
<>
<Welcome name="Michael"/>
</>
);
}

export default App

效果:

raw-image

當我們將鍵值對傳入子組件時,它們都儲存在Props物件中,要獲取與鍵關聯的值,輸入Props.鍵的名稱就可以了

好,現在我們繼續擴展Welcome.jsx程式碼:

function Welcome(props) {
return(
<div>
<h1>歡迎, {props.name}!</h1>
<p>您的年紀: {props.age}!</p>
<p>學生: {props.isStudent ? "Yes" : "No"}</p>
</div>
);
}

export default Welcome;

接下來,我們在再次編輯App.jsx程式碼:

import Welcome from "./Welcome.jsx"

function App() {
const name = "John";
const age = 20;
let isStudent = false;
return (
<>
<Welcome name="Michael" age={age} isStudent={isStudent}/>
</>
);
}

export default App

效果:

raw-image

Props 的類型檢查 (PropTypes)

  • 為了確保傳遞的 Props 符合預期的數據類型,可以使用 prop-types 庫進行類型檢查。

為此我們需要繼續編輯Welcome.jsx程式碼:

import PropTypes from 'prop-types';

function Welcome(props) {
return(
<div>
<h1>歡迎, {props.name}!</h1>
<p>您的年紀: {props.age}!</p>
<p>學生: {props.isStudent ? "Yes" : "No"}</p>
</div>
);
}
Welcome.propTypes = {
name: PropTypes.string,
age: PropTypes.number,
isStudent: PropTypes.bool,
}
export default Welcome;

回到App.jsx,此時如果我們執行以下變動

import Welcome from "./Welcome.jsx"

function App() {
const name = "John";
const age = 20;
let isStudent = 100; // 變更此處
return (
<>
<Welcome name="Michael" age={age} isStudent={isStudent}/>
</>
);
}

export default App

此時到瀏覽器那邊按下F12後觀察Console,你會收到以下警告:

raw-image

所以,這不但不會停止程序運行,只是發出警告。類型檢查是一個好習慣,這對Debug非常有用。

最後,我們探討最後一個主題:

Props 的默認值 (Default Props)

如果父組件沒有傳遞某個 Prop,可以為子組件設置默認值。

為此我們需要繼續編輯Welcome.jsx程式碼:

import PropTypes from 'prop-types';

function Welcome(props) {
return(
<div>
<h1>歡迎, {props.name}!</h1>
<p>您的年紀: {props.age}!</p>
<p>學生: {props.isStudent ? "Yes" : "No"}</p>
</div>
);
}
Welcome.propTypes = {
name: PropTypes.string,
age: PropTypes.number,
isStudent: PropTypes.bool,
}
Welcome.defaultProps = {
name: "Guest",
age: 0,
isStudent: false,
}
export default Welcome;

回到App.jsx,此時如果添加另外的相同組件,一個只傳遞名字、一個甚麼都不傳,請觀察輸出。

import Welcome from "./Welcome.jsx"

function App() {
const name = "John";
const age = 20;
let isStudent = false;
return (
<>
<Welcome name="Michael" age={age} isStudent={isStudent}/>
<Welcome />
<Welcome name={name}/>
</>
);
}

export default App

效果:

raw-image

不過,我們打開瀏覽器那邊按下F12後觀察Console,你會收到以下警告:

raw-image
  • 這個訊息的意思是:未來的 React 主要版本中,將不再支援在「函式型元件」(function components) 中使用 defaultProps。官方建議改用 JavaScript 的預設參數(default parameters) 來取代。
import PropTypes from 'prop-types';

function Welcome({
name = "Guest",
age = 0,
isStudent = false
}) {
return (
<div>
<h1>歡迎, {name}!</h1>
<p>您的年紀: {age}!</p>
<p>學生: {isStudent ? "Yes" : "No"}</p>
</div>
);
}

Welcome.propTypes = {
name: PropTypes.string,
age: PropTypes.number,
isStudent: PropTypes.bool,
};

export default Welcome;
  • 此時,輸出效果是一樣的。
留言
avatar-img
電資鼠 - 您的學習好夥伴
21會員
242內容數
在當今數位時代,電資領域人才需求爆發式成長,不論是前端網頁設計、嵌入式開發、人工智慧、物聯網還是軟硬體整合,這些技術都在改變世界。而掌握 C/C++、Python、數位邏輯、電路學與嵌入式開發等大學電資領域的課程,正是進入這個高薪、高需求產業的關鍵!
2025/03/06
在 React 中,狀態管理是構建複雜應用的重要一環,其中 useContext 與 Redux 都提供了解決方案,但它們各有優缺點和適用場景。 有鑑於Redux以英文教學為主,網上中文的教學不多,初學者會遇到一些困難,所以本章節希望以一篇文章帶領你快速入門Redux,透過實作的方式上手這個技能!
2025/03/06
在 React 中,狀態管理是構建複雜應用的重要一環,其中 useContext 與 Redux 都提供了解決方案,但它們各有優缺點和適用場景。 有鑑於Redux以英文教學為主,網上中文的教學不多,初學者會遇到一些困難,所以本章節希望以一篇文章帶領你快速入門Redux,透過實作的方式上手這個技能!
2025/03/05
在 React 中,useContext() 是一個 Hook,用來讓你在函式元件中輕鬆地存取 context 資料,避免繁瑣的 props 傳遞。以下是一步步的教學與示例程式碼。 透過本章學習,你將掌握 如何在 React 應用中運用 useContext() 管理全域狀態,提升開發效率!
2025/03/05
在 React 中,useContext() 是一個 Hook,用來讓你在函式元件中輕鬆地存取 context 資料,避免繁瑣的 props 傳遞。以下是一步步的教學與示例程式碼。 透過本章學習,你將掌握 如何在 React 應用中運用 useContext() 管理全域狀態,提升開發效率!
2025/03/05
在本章,我們將使用 React Hooks(useState、useEffect、useRef)來 開發一個碼錶 (Stopwatch) 應用。
2025/03/05
在本章,我們將使用 React Hooks(useState、useEffect、useRef)來 開發一個碼錶 (Stopwatch) 應用。
看更多
你可能也想看
Thumbnail
本文深度解析賽勒布倫尼科夫的舞臺作品《傳奇:帕拉贊諾夫的十段殘篇》,如何以十段殘篇,結合帕拉贊諾夫的電影美學、象徵意象與當代政治流亡抗爭,探討藝術在儀式消失的現代社會如何承接意義,並展現不羈的自由靈魂。
Thumbnail
本文深度解析賽勒布倫尼科夫的舞臺作品《傳奇:帕拉贊諾夫的十段殘篇》,如何以十段殘篇,結合帕拉贊諾夫的電影美學、象徵意象與當代政治流亡抗爭,探討藝術在儀式消失的現代社會如何承接意義,並展現不羈的自由靈魂。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
本文分析導演巴里・柯斯基(Barrie Kosky)如何運用極簡的舞臺配置,將布萊希特(Bertolt Brecht)的「疏離效果」轉化為視覺奇觀與黑色幽默,探討《三便士歌劇》在當代劇場中的新詮釋,並藉由舞臺、燈光、服裝、音樂等多方面,分析該作如何在保留批判核心的同時,觸及觀眾的觀看位置與人性幽微。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
5 月將於臺北表演藝術中心映演的「2026 北藝嚴選」《海妲・蓋柏樂》,由臺灣劇團「晃晃跨幅町」製作,本文將以從舞台符號、聲音與表演調度切入,討論海妲・蓋柏樂在父權社會結構下的困境,並結合榮格心理學與馮.法蘭茲對「阿尼姆斯」與「永恆少年」原型的分析,理解女人何以走向精神性的操控、毀滅與死亡。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
《轉轉生》(Re:INCARNATION)為奈及利亞編舞家庫德斯.奧尼奎庫與 Q 舞團創作的當代舞蹈作品,結合拉各斯街頭節奏、Afrobeat/Afrobeats、以及約魯巴宇宙觀的非線性時間,建構出關於輪迴的「誕生—死亡—重生」儀式結構。本文將從約魯巴哲學概念出發,解析其去殖民的身體政治。
Thumbnail
各位使用 Vue.js 開發的小夥伴們,你們都怎麼實作父子層組件資料的雙向綁定呢?如果你還在寫 prop + emit 的話,不妨進來看看吧。
Thumbnail
各位使用 Vue.js 開發的小夥伴們,你們都怎麼實作父子層組件資料的雙向綁定呢?如果你還在寫 prop + emit 的話,不妨進來看看吧。
Thumbnail
在程式任何地方都能修改各種react組件狀態的做法分享
Thumbnail
在程式任何地方都能修改各種react組件狀態的做法分享
Thumbnail
2023 Vue直播班筆記 - 動態路由Props,接續之前的一般動態路由。分為 "寫死" 及 "彈性" 兩種。
Thumbnail
2023 Vue直播班筆記 - 動態路由Props,接續之前的一般動態路由。分為 "寫死" 及 "彈性" 兩種。
Thumbnail
這系列是我在 2023 六角學院 Vue作品實戰班的筆記,筆記以本人理解的方式記錄。此篇主題為 Slot Props 進階應用 ,其中包含單筆資料、多筆資料。
Thumbnail
這系列是我在 2023 六角學院 Vue作品實戰班的筆記,筆記以本人理解的方式記錄。此篇主題為 Slot Props 進階應用 ,其中包含單筆資料、多筆資料。
追蹤感興趣的內容從 Google News 追蹤更多 vocus 的最新精選內容追蹤 Google News