组件间通信
方式一: 通过 props 传递
1) 共同的数据放在父组件上, 特有的数据放在自己组件内部(state)
2) 通过 props 可以传递一般数据和函数数据, 只能一层一层传递
3) 一般数据–>父to子–>子组件读取数据
新的数据以props出现, 因此在componentWillReceiveProps中编写ajax请求代码
4) 函数数据–>子to父–>子组件调用函数
存在的问题:
- 孙子组件需要逐层传递
- cousin组件需要以父组件作为媒介
方式二: 使用消息订阅(subscribe)-发布(publish)机制
很好解决props上述两个问题
订阅相当于绑定, 发布相当于触发.
1) 工具库:PubSubJS
2) 下载:npm install pubsub-js –save (该机制对多种语言都有效, 下载js版本
3) 使用:
1 | import PubSub from'pubsub-js'//引入 |
回调函数最好使用箭头函数 比如在回调函数中使用this.setState报错
利用PubSub可以很方便地实现cousin通信
sub&pub的判断: 在触发事件的地方pub消息
订阅一般发生在componentDidMount中
(对于函数数据, 表面上父to子, 其实是子to父. 因此pubsub可能与直觉相违背)
如父元素中的数据, 由子元素的事件导致改变. 则父元素将会把自身的update函数传给子元素, 由子元素调用. 然而在pubsub中, 应该改写为子元素将事件信息pub, 父元素sub监听, 利用子元素的信息调用update
方式三:redux
后面专门讲解