- Objective:
- Breadcrumb:
# 概念阐释
## 语法
每个组件都有 props,props 是一个对象,掌握了关于组件的数据。React中的Props是单向传递的,从顶部到底部,从父级传递到子级的不变数据。这意味着如果想要添加新的props值,必须从它的父级添加。
## 语义
```jsx
<button type="submit" value="Submit"> Submit </button>
// 将函数作为props的值传递,用大括号包含
<button foo={bar} />
```
`type`和`value`是`<button>`的属性,访问 props 对象:`props.name`。
# 实例
## 获取 props 的 JSON 数据
```jsx
// App.js
import React from 'react';
import ReactDOM from 'react-dom';
import PropsDisplayer from './PropsDisplayer';
function App() {
return <PropsDisplayer myProp="Hello" />;
}
export default App;
```
```jsx
//PropsDisplayer
import React from 'react';
function PropsDisplayer(props) {
const stringProps = JSON.stringify(props);
return (
<div>
<h1>CHECK OUT MY PROPS OBJECT</h1>
<h2>{stringProps}</h2>
</div>
);
}
export default PropsDisplayer;
```
- App.js是父组件
- `props`作为 `PropsDisplayer` 的参数传入
- `stringProps` 将 js 转换为 JSON 格式
- 在`<h2>`中渲染`stringProps`的结果
## 访问props对象
```jsx
//App.js
import React from 'react';
import Product from './Product'
function App() {
return <Product name="iphone" price = {999} rating = "5.0/5.0" />;
}
export default App;
//在 product 中定义了 name,price,rating属性
```
```jsx
// Product.js
import React from 'react';
function Product(props) { //也可以直接写成({name,price,rating})
return (
<div>
<h1>{props.name}</h1>
<h2>{props.price}</h2>
<h3>{props.rating}</h3>
</div>
);
}
export default Product;
```
# 相关内容
## 注意事项
除了 string 外,其他的新型都需要包裹在大括号`{}`内。
```js
<Greeting myInfo={["Astronaut", "Narek", "43"]} />
<Greeting name="The Queen Mary" city="Long Beach, California" age={56} haunted={true} />
```
所以父级包括子级的组件函数和对应的 props 名和值,子级包括 JSX 元素和 props.来自父级的 props 名称。
# 参考资料
- [props-codecademy](https://www.codecademy.com/journeys/full-stack-engineer/paths/fscj-22-front-end-development/tracks/fscj-22-react-part-ii/modules/wdcp-22-components-interacting-218cf398-22f2-4666-97bc-52d6789f0a78/lessons/this-props/exercises/access-props)