React的组件间通信

react

一、React的单向数据流

React是单向数据流,数据主要从父节点传递到子节点(通过props)。
如果顶层(父级)的某个props改变了,React会重渲染所有的子节点。这通常被称为“自顶向下”或“单向”数据流。任何状态始终由某个特定组件所有,并且从该状态导出的任何数据或UI只能影响树中“下方”的组件。

二、React的组件间通信

1)父级-》子级

比较简单,直接调用时设置props值

 1 <!DOCTYPE html>

2 <html>

3 <head>

4 <meta charset="UTF-8" />

5 <title>菜鸟教程 React 实例</title>

6 <script src="https://cdn.bootcss.com/react/15.4.2/react.min.js"></script>

7 <script src="https://cdn.bootcss.com/react/15.4.2/react-dom.min.js"></script>

8 <script src="https://cdn.bootcss.com/babel-standalone/6.22.1/babel.min.js"></script>

9 </head>

10 <body>

11 <div id="example"></div>

12 <script type="text/babel">

13 var WebSite = React.createClass({

14 getInitialState: function() {

15 return {

16 name: "菜鸟教程",

17 site: "http://www.runoob.com"

18 };

19 },

20

21 render: function() {

22 return (

23 <div>

24 <Name name={this.state.name} />

25 <Link site={this.state.site} />

26 </div>

27 );

28 }

29 });

30

31 var Name = React.createClass({

32 render: function() {

33 return (

34 <h1>{this.props.name}</h1>

35 );

36 }

37 });

38

39 var Link = React.createClass({

40 render: function() {

41 return (

42 <a href={this.props.site}>

43 {this.props.site}

44 </a>

45 );

46 }

47 });

48

49 ReactDOM.render(

50 <WebSite />,

51 document.getElementById('example')

52 );

53 </script>

54 </body>

55 </html>

2)子级-》父级

用回调函数,传参

 1 class Father extends React.Component{

2 constructor(props){

3 super(props);

4 this.state={

5 inputValue:""

6 }

7 }

8 //在回调函数里处理子级的输入

9 handleInputChange(e){

10 this.setState({

11 inputValue:e.target.value

12 });

13 }

14 render(){

15 return (

16 <div>

17 <span>输入为{this.state.inputValue}</span>

18 <Child onChange={this.handleInput2Change.bind(this)} />

19 </div>

20 );

21 }

22 }

23 //通过onChange={this.props.onChange},子级输入事件发生时,调用的是父级传入的回调函数

24 class Child extends React.Component{

25 render(){

26 return (

27 <div>

28 <input value={this.props.value} onChange={this.props.onChange}/>

29 </div>

30 );

31 }

32 }

33 ReactDOM.render(

34 <Father />,

35 document.getElementById('root')

36 );


3)兄弟《-》兄弟: 

按照React单向数据流方式,我们需要借助父组件进行传递,通过父组件回调函数改变兄弟组件的props。其实这种实现方式与子组件更新父组件状态的方式是大同小异的。
下面实现一个组件通信的例子,一个输入框的数据改变,另一个输入框数据会跟随同时改变。

 1 class Form1 extends React.Component{

2 constructor(props){

3 super(props);

4 this.state={

5 input1Value:"",

6 input2Value:""

7 }

8 }

9 handleInput1Change(e){

10 const input1=e.target.value;

11 let input2=input1-1;

12 this.setState({

13 input1Value:input1,

14 input2Value:input2

15 });

16 }

17 handleInput2Change(e){

18 const input2=e.target.value;

19 let input1=input2-0 + 1;

20 this.setState({

21 input1Value:input1,

22 input2Value:input2

23 });

24 }

25 render(){

26 return (

27 <div>

28 输入框1:

29 <Input1 value={this.state.input1Value} onChange={this.handleInput1Change.bind(this)} />

30 输入框2:

31 <Input2 value={this.state.input2Value} onChange={this.handleInput2Change.bind(this)} />

32 </div>

33 );

34 }

35 }

36 class Input1 extends React.Component{

37 render(){

38 return (

39 <div>

40 <input value={this.props.value} onChange={this.props.onChange}/>

41 </div>

42 );

43 }

44 }

45 class Input2 extends React.Component{

46 render(){

47 return (

48 <div>

49 <input value={this.props.value} onChange={this.props.onChange}/>

50 </div>

51 );

52 }

53 }

54 ReactDOM.render(

55 <Form1 />,

56 document.getElementById('root')

57 );

以上是 React的组件间通信 的全部内容, 来源链接: utcz.com/z/382796.html

回到顶部