在 React 中,props (properties) 是一個用來傳遞資料給元件的機制
React 的 Component(元件)可以看作是一個函式,而 props 就是這個函式的參數
單向資料流 (Unidirectional Data Flow):由父元件傳給子元件
唯讀 (Read-Only):不能在子元件修改 props
父組件
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 }
])
return (
<div className="home">
<BlogList blogs={ blogs } title="All Blogs" />
</div>
);
}
export default Home;
子組件
BlogList.js
const BlogList = ({ blogs, title }) => {
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>
</div>
))}
</div>
);
}
export default BlogList;
也可以寫成:
子組件
BlogList.js
const BlogList = ({ props }) => {
const blogs = props.blogs;
const title = props.title;
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>
</div>
))}
</div>
);
}
export default BlogList;
blogs
和 title
傳給子元件 (BlogLists)瀏覽器執行畫面:
父組件
App.js
import Button from "./Button";
function App() {
const handleClick = () => {
alert("Button clicked");
};
return <Button onClick={handleClick} />;
}
export default App;
子組件
Button.js
const Button = (props) => {
return <button onClick={props.onClick}>Click me</button>;
};
export default Button;
瀏覽器執行畫面: