
在 React 中,props(屬性)是實現 元件之間資料傳遞 的主要機制,特別是在 父元件和子元件 之間。
你可以將 props 想像成父元件和子元件之間的溝通橋樑,讓我們以 Pizza 元件為例:
// Pizza 元件
function Pizza() {
  return (
    <div>
	  <img src="pizzas/spinaci.jpg" alt="Pizza spinaci" />
	  <h3>Pizza Spinaci</h3>
	  <p>Tomato, mozarella, spinach, and ricotta cheese</p>
	</div>
  )
}
現在,我們嘗試將 props 傳遞給 Pizza 元件,props 的屬性和值如下:
// 因為在 App 元件裡面使用 Pizza 元件,所以 App 是 Pizza 的父元件
function App() {
  return (
    // 將 props 傳遞到 Pizza 元件內(父傳子)
    <Pizza
	  name="Pizza Spinaci"
	  ingredient="Tomato, mozarella, spinach, and ricotta cheese"
	  photoName="pizzas/spinaci.jpg"
	/>
  )
}
在 Pizza 元件裡,可以使用 props 參數來接收這些傳遞下來的屬性:
function Pizza(props) {
  console.log(props)            // { name: ..., ingredient: ..., photoName: ... }
  console.log(props.name)       // Pizza Spinaci
  console.log(props.ingredient) // Tomato, mozarella, spinach, and ricotta cheese
  console.log(props.photoName)  // pizzas/spinaci.jpg
  return (
    <div>
	  <img src="pizzas/spinaci.jpg" alt="Pizza spinaci" />
	  <h3>Pizza Spinaci</h3>
	  <p>Tomato, mozarella, spinach, and ricotta cheese</p>
	</div>
  )
}
要在 JSX 中插入 props 的值,需要使用大括號 {} 進入 JavaScript 模式,然後將值插入到對應的屬性中:
function Pizza(props) {
  return (
    <div>
	  <img src={props.photoName} alt={props.name} />
	  <h3>{props.name}</h3>
	  <p>{props.ingredient}</p>
	</div>
  )
}
由於 props 參數是一個物件,我們可以使用解構的方式簡化程式碼:
function Pizza({ name, ingredient, photoName }) {
  return (
    <div>
	  <img src={photoName} alt={name} />
	  <h3>{name}</h3>
	  <p>{ingredient}</p>
	</div>
  )
}
完整的程式碼如下:
// App 元件(父元件)
function App() {
  return (
    <Pizza
	  name="Pizza Spinaci"
	  ingredient="Tomato, mozarella, spinach, and ricotta cheese"
	  photoName="pizzas/spinaci.jpg"
	/>
  )
}
// Pizza 元件(子元件)
function Pizza({ name, ingredient, photoName }) {
  return (
    <div>
	  <img src={photoName} alt={name} />
	  <h3>{name}</h3>
	  <p>{ingredient}</p>
	</div>
  )
}
一旦將 props 傳遞給子元件,子元件就不能修改這些 props 的值,這種設計方式有助於確保資料的一致性和可控性,。
// Pizza 元件(子元件)
function Pizza({ name, ingredient, photoName }) {
  return (
    <div>
	  <img src={photoName} alt={name} />
	  <h3>{name}</h3>
	  <p>{ingredient}</p>
      
      // 無法修改 props 的值
      <button onClick={() => name = "Apple Pie"}>Change</button>
	</div>
  )
}
React 中的資料流動是單向的,資料從父元件傳遞到子元件,但不能反向傳遞,這有助於保持應用程序的可預測性和可維護性。
// 父元件傳遞 props
function App() {
  return (
    <Pizza
	  name="Pizza Spinaci"
	  ingredient="Tomato, mozarella, spinach, and ricotta cheese"
	  photoName="pizzas/spinaci.jpg"
	/>
  )
}
// 子元件接收 props
function Pizza({ name, ingredient, photoName }) {
  return (
    <div>
	  <img src={photoName} alt={name} />
	  <h3>{name}</h3>
	  <p>{ingredient}</p>
	</div>
  )
}
Props 是父元件和子元件之間的溝通橋樑,要特別注意 props 具有以下規則:
這些規則確保應用程序的資料流動具有清晰的單向性。