# 组件间数据通信父向子
> 在Vue 中我们已经了解过 父向子传递数据是通过**Props**(属性)来进行传递数据。React也同是是通过Props属性向子组件传递数据。
> 和Vue一样在定义组件时我们称之为子组件。在调用组件时称之为父组件
![](https://box.kancloud.cn/b6a9a33ac1bd987bc30332f3377f004b_812x312.png)
## 父向子传递数据体验
父组件通过标签属性来传递。子组件通过构造函数中的形参来进行接收。
```jsx
function Hello(props) {
console.log(props);
return <div>
这是一个div{name}
<h1>这是一个大大的h1</h1>
</div>;
}
ReactDOM.render(<Hello name='小黑'></Hello>, document.getElementById('app'))
```
## 父向子传递数据高级
一般来讲我们向子组件传递数据,可能会有大量的数据,那我们如何操作呢?
<iframe width="100%" height="300" src="//jsrun.net/IFyKp/embedded/all/light" allowfullscreen="allowfullscreen" frameborder="0"></iframe>
~~~
function Hello(props) {
console.log(props);
return <div>
这是一个div 名字是{props.name}
价格是{props.price}
<h1>这是一个大大的h1</h1>
</div>;
}
ReactDOM.render(<Hello name='小黑' price="10"></Hello>, document.getElementById('app'))
~~~
## 问题
上面的源码我们写的也不错。不过如果一旦父向子传递的数据越来越多那该怎么办?那我们在父组件上写的标签属性会越来越多。如何解决问题?
React提供了属性扩散来帮助我们解决问题。
我们看一下如何改造
~~~
var cat = {
name:'小黑',
price:'10'
}
ReactDOM.render(<Hello {...cat}></Hello>, document.getElementById('app'))
~~~
<iframe width="100%" height="300" src="//jsrun.net/aFyKp/embedded/all/light" allowfullscreen="allowfullscreen" frameborder="0"></iframe>
## 总结
父组件向子组件传递数据可以通过 标签属性传递。
子组件接收父组件传递的值通过书写形参props来接收。props是大家约定的,都这么写。所以就不要随意起名。
父组件向子组件传递的数据量很大时,可以通过属性扩散的形式向下传递。
子组件接收数据,也可以通过解构的方式化简书写的麻烦。
- webpack复习
- React基础
- 前端三大主流框架对比
- React中几个核心的概念
- React基础语法
- React JSX语法
- React组件
- 普通组件
- 组件通信-父向子传递
- 组件拆成单个文件
- 面向对象复习
- Class组件基础
- Class组件的私有状态(私有数据)
- 案例:实现评论列表组件
- 组件样式管理
- 组件样式分离-样式表
- CSS模块化
- 生命周期
- React组件生命周期
- Counter组件来学习组件生命周期
- 生命周期总结
- 生命周期案例
- React评论列表
- React双向数据绑定
- React版todolist
- 其它提高(了解)
- 组件默认值和数据类型验证
- 绑定this并传参的三种方式
- 祖孙级和非父子组件传递数据(了解)
- React路由
- 路由基础
- 动态路由
- 路由严格模式
- 路由导航定位
- 路由重定向
- 路由懒加载
- WolfMovie项目
- 项目初始化
- AntDesign使用
- 其它相关了解