react基础(7)—— 简单通信
#########################################
命运这种东西,生来就是要被踏于足下的,如果你还未有力量反抗它,只需怀着勇气等待。
#########################################
1. 父传子 - 属性通信
2. 子传父 - 回调函数通信
3. 简单兄弟通信 - 中间人通信
4. 复杂通信 -
(1) react 自己带 context 通信方式
(2) flux
redux 解决方案
react-redux
// vue props down, events up
// react props down, callback up
------------------------------------父传子--------------------------------------
在父组件中给子组件定义一个属性,这个属性等于父组件的状态,
在子组件中通过this.props.父组件属性,来读取这个状态,
父组件中的状态更改的时候,子组件自动更改(单项数据流),
应用:二级菜单,点击一级的时候,数据自动流向二级中的结构中,这样点击任何一个一级菜单,看到的二级菜单的内容都是不一样的。
1 import React,{Component} from "react";
15 class Child extends Component{ 16 render(){ 17 return <div> 18 child-----{this.props.kname} 19 </div> 20 } 21 } 22 23 class App extends Component{ 24 25 constructor(props) { 26 super(props); 27 28 this.state = { 29 name:"父组件中定义的名字" 30 }; 31 } 32 33 render(){ 34 return <div> 35 hello 36 <Child kname={this.state.name}/> 37 38 <button onClick = {()=>{ 39 this.setState({ 40 name:"父组件中定义的名字111111" 41 }) 42 }}>click</button> 43 </div> 44 } 45 } 46 47 //单向数据流 48 49 export default App;
-------------------------------------------子传父----------------------------------
在父组件中定义一个属性等于一个回调函数,回调函数的参数就是子组件传过来的,然后通过this.setState赋值,然后显示
子组件中通过 this.props.父组件属性(参数),来触发父组件中的回调函数,
1 import React,{Component} from "react"; 2 3 class Child extends Component{ 4 5 constructor(props) { 6 super(props); 7 8 this.state = { 9 name:"child组件中定义的名字" 10 }; 11 } 12 13 render(){ 14 return <div> 15 child 16 <button onClick={()=>{ 17 //把状态传给父组件 18 //回调函数 19 console.log(this.props.myevent); 20 this.props.myevent(this.state.name);//执行传来的回调函数,如果没有放在回调函数中,会有内存max问题 21 }}>child click</button> 22 </div> 23 } 24 } 25 26 class App extends Component{ 27 constructor(props) { 28 super(props); 29 30 this.state = { 31 mytext:"" 32 }; 33 } 34 35 render(){ 36 return <div> 37 hello----{this.state.mytext} 38 39 <Child myevent={(data)=>{ 40 //这个函数等着被触发 41 console.log("定义在父组件的方法",data) 42 43 this.setState({ 44 mytext:data 45 }) 46 }}/> 47 </div> 48 } 49 } 50 51 export default App;