在 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;
瀏覽器執行畫面