在 Day 8 和 Day 10 的文章已經介紹到 state 和 props 的基本概念
這篇文章主要會說明這兩者的差異以及如何做搭配
State:儲存元件自己擁有的狀態
Props:接收父元件提供的資料
| State(狀態) | Props(屬性) | |
|---|---|---|
| 資料來源 | 元件自己管理 | 元件從父元件傳入 | 
| 是否可修改 | 可變的(可用 setState 更新) | 
不可變的(唯讀) | 
| 類比 | 區域變數 | 函式參數 | 
| 用途 | 管理互動或動態資料 | 傳遞靜態或外部資料 | 
| 改變後影響 | 重新渲染畫面 | 重新渲染畫面 | 
Home.js
import { useState } from "react";
import BlogList from "./BlogList";
const Home = () => {
  const [blogs, setBlogs] = useState([
    { title: "我們生來就是自由的", author:"艾倫", id: 1 },
    { title: "這個世界是很殘酷的,但是也非常美麗", author: "米卡莎", id: 2 },
    { title: "什麼都無法捨棄的人,什麼都改變不了", author:"阿爾敏", id: 3 }
  ])
  const handleDelete = (id)=>{
    const newBlogs = blogs.filter(blog => blog.id !== id);
    setBlogs(newBlogs);
  }
  return (
    <div className="home">
      <BlogList blogs={blogs} title="All Blogs" handleDelete={handleDelete}/>
    </div>
  );
}
 
export default Home;
BlogList.js
const BlogList = ({ blogs, title, handleDelete}) => {   
  return (
    <div className="blog-list">
      <h2>{ title }</h2>
      {blogs.map(blog => (
        <div className="blog-preview" key={blog.id} >
          <h2>{ blog.title }</h2>
          <p>Written by { blog.author }</p>
          <button onClick={()=> handleDelete(blog.id)}>Delete</button>
        </div>
      ))}
    </div>
  );
}
 
export default BlogList;
App.js
import Home from './Home';
function App() {
  return (
    <div className="App">
      <div className="content">
        <Home />
      </div>
    </div>
  );
}
export default App;
瀏覽器執行畫面