1. 父传子
自定义属性+props
通过自定义属性的方式向子组件传值,子组件通过this.props.值 名称接收使用 父:
import React, { Component } from 'react'
export default class Father extends Component {
constructor() {
super();
this.state = {
msg:"父组件的msg"
}
}
render() {
return (
<div className="Father">
<h2>Father</h2>
<Child msg={this.state.msg}></Child>
</div>
)
}
}
子组件接收 
父传子 ref
父传子 ref 方法一:直接调子组件的setState

 
父传子 ref 方法二:调用子组件中的方法
 
2. 子传父
事件传值
原理:还是父传子的原理,只不过父组件传递给子组件的不是数据,而是一个方法。 子组件依然通过 this.props 调用。通过调用父组件传过来的方法,并传递参数的方式,把需要传递的值以父组件传来的方法的参数的形式传递给父组件。从而达到子传父的目的。
父组件接收:
import React, { Component } from 'react'
import Child from './Child.jsx'
export default class Father extends Component {
constructor() {
super();
this.state = {
msg: ""
}
}
render() {
return (
<div>
<h2>Father</h2>
{}
<Child getMsgHandler={this.getMsgHandler.bind(this)}></Child>
</div>
)
}
{}
getMsgHandler(val){
this.setState({
msg:val
})
}
}
子组件传递:
import React, { Component, Fragment } from 'react'
export default class Child extends Component {
constructor() {
super();
this.state = {
msg: "子组件的msg"
}
}
render() {
return (
<div className="Child">
<h2>子组件</h2>
{}
<button onClick={this.clickHandler.bind(this)}>给父级发送msg</button>
</div>
)
}
clickHandler() {
{}
this.props.getMsgHandler(this.state.msg)
}
}
注意:用bind解决函数this指向为undifined的问题, 或者,用箭头函数


子传父 ref


3. 跨组件传值
context实现跨级父子组件间的通信
 创建一个context对象  src\context\appContext.js
import { createContext } from 'react'
const ctx = createContext()
let { Provider, Consumer } = ctx
export {
ctx as default,
Provider,
Consumer
}
1. 只获取
App.js 
Child.jsx
 
2. 获取+修改
 Child.jsx  


参考: react 中的组件传值
|