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;
  • 此時,輸出效果是一樣的。
在當今數位時代,電資領域人才需求爆發式成長,不論是前端網頁設計、嵌入式開發、人工智慧、物聯網還是軟硬體整合,這些技術都在改變世界。而掌握 C/C++、Python、數位邏輯、電路學與嵌入式開發等大學電資領域的課程,正是進入這個高薪、高需求產業的關鍵!
留言
avatar-img
留言分享你的想法!

































































在 React 中,有三種主要方式可以套用 CSS 來設計和美化應用的外觀。每種方式都有不同的適用場景,本文都有詳細介紹:
React(也稱為React.js或ReactJS)是一個自由及開放原始碼的前端JavaScript工具庫,用於基於UI組件構建使用者介面。本章節會帶你初步建立環境並教導如何做使用。
在 React 中,有三種主要方式可以套用 CSS 來設計和美化應用的外觀。每種方式都有不同的適用場景,本文都有詳細介紹:
React(也稱為React.js或ReactJS)是一個自由及開放原始碼的前端JavaScript工具庫,用於基於UI組件構建使用者介面。本章節會帶你初步建立環境並教導如何做使用。
你可能也想看
Google News 追蹤
Thumbnail
各位使用 Vue.js 開發的小夥伴們,你們都怎麼實作父子層組件資料的雙向綁定呢?如果你還在寫 prop + emit 的話,不妨進來看看吧。
React Hooks 是 React 16.8 中引入的一組新的 API,允許你在函數組件中使用狀態和其他 React 特性,而不需要寫類組件。 狀態管理: useState 鉤子允許在函數組件中添加狀態。 副作用管理: useEffect 鉤子允許處理副作用,如數據獲取、訂閱和手動 DO
06. React Forms: Dynamically Add New Input Fields On Click || Learn React Through Mini Projects
Thumbnail
在程式任何地方都能修改各種react組件狀態的做法分享
Thumbnail
2023 Vue直播班筆記 - 動態路由Props,接續之前的一般動態路由。分為 "寫死" 及 "彈性" 兩種。
一般而言,組件之間的資料傳遞,可以使用 props 來達成,不過一旦層級過多的時候,props 就要逐層向下傳遞,會越來越麻煩且複雜。 而 provide、inject 可以解決這個問題,它可以提供一個「源頭」,子組件們可以藉由同一個源頭取得對應的資料,且沒有層級分別,都可以取得,就不用逐層傳遞資
當 父組件 有數據想傳送到 子組件 就可以使用props 1​. 父層傳遞設置 可以在父組件的屬性給予一個值,當作要傳送到子組件的資料。 父層組件​ : <!-- App.vue (父組件) --> <template> <div> <ChildComponent greetin
Thumbnail
這系列是我在 2023 六角學院 Vue作品實戰班的筆記,筆記以本人理解的方式記錄。此篇主題為 Slot Props 進階應用 ,其中包含單筆資料、多筆資料。
Thumbnail
前言 現在的前端需求已經越來越高,要考慮HTML及CSS的切版美觀程度,以及React以及Flutter所提出的元件(Componet、widget)觀念,也就是將元件模組化,使元件可以更動態的被程式運行,而不用靜態的客製化每一個介面。開發一個好的元件可以提升整體的開發速度,讓任何使用元件的開發者
Thumbnail
React Props - React 白話文運動。這一篇則會針對 React 語法進一步做講解, 前幾篇也學會了如何建立一個 React 元件,並且學會了元件之間有父子元件的關係。這篇會介紹 React Props 的概念,包含了:React 元件宣告、React Props。
Thumbnail
各位使用 Vue.js 開發的小夥伴們,你們都怎麼實作父子層組件資料的雙向綁定呢?如果你還在寫 prop + emit 的話,不妨進來看看吧。
React Hooks 是 React 16.8 中引入的一組新的 API,允許你在函數組件中使用狀態和其他 React 特性,而不需要寫類組件。 狀態管理: useState 鉤子允許在函數組件中添加狀態。 副作用管理: useEffect 鉤子允許處理副作用,如數據獲取、訂閱和手動 DO
06. React Forms: Dynamically Add New Input Fields On Click || Learn React Through Mini Projects
Thumbnail
在程式任何地方都能修改各種react組件狀態的做法分享
Thumbnail
2023 Vue直播班筆記 - 動態路由Props,接續之前的一般動態路由。分為 "寫死" 及 "彈性" 兩種。
一般而言,組件之間的資料傳遞,可以使用 props 來達成,不過一旦層級過多的時候,props 就要逐層向下傳遞,會越來越麻煩且複雜。 而 provide、inject 可以解決這個問題,它可以提供一個「源頭」,子組件們可以藉由同一個源頭取得對應的資料,且沒有層級分別,都可以取得,就不用逐層傳遞資
當 父組件 有數據想傳送到 子組件 就可以使用props 1​. 父層傳遞設置 可以在父組件的屬性給予一個值,當作要傳送到子組件的資料。 父層組件​ : <!-- App.vue (父組件) --> <template> <div> <ChildComponent greetin
Thumbnail
這系列是我在 2023 六角學院 Vue作品實戰班的筆記,筆記以本人理解的方式記錄。此篇主題為 Slot Props 進階應用 ,其中包含單筆資料、多筆資料。
Thumbnail
前言 現在的前端需求已經越來越高,要考慮HTML及CSS的切版美觀程度,以及React以及Flutter所提出的元件(Componet、widget)觀念,也就是將元件模組化,使元件可以更動態的被程式運行,而不用靜態的客製化每一個介面。開發一個好的元件可以提升整體的開發速度,讓任何使用元件的開發者
Thumbnail
React Props - React 白話文運動。這一篇則會針對 React 語法進一步做講解, 前幾篇也學會了如何建立一個 React 元件,並且學會了元件之間有父子元件的關係。這篇會介紹 React Props 的概念,包含了:React 元件宣告、React Props。