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;

 

posted on 2018-10-30 18:26  杨学友  阅读(117)  评论(0编辑  收藏  举报

导航