React组件通信

React组件之间的通信

一、父组件传递给子组件

1.Props

Props 是目前为止最常用的方式,用于在组件之间传递信息。用 props 可以把数据从父组件传递到它的子组件中。

父组件:

// class类写法
import Children  from '../Children'
export default class Father extends Component {
  state = {
    msg:"我在父,要去子",
  }
  render() {
    return (
      <div>
        <h1>父组件</h1>
        <Children zidingyi={this.state.msg} />
      </div>
    )
  }
}

// 函数写法
import Children from '../Children'
export default function Father () {
  let [arr,setarr] = useState('我在父,要去子');
  return (
    <div className='firther'>
      <h1>父组件</h1>
      <Children msg={arr} />
    </div>
  )
}

子文件:

// class类写法
export default class Children extends Component {
  render() {
    let {zidingyi} = this.props;
    return (
      <div>
        <h1>子组件</h1>
        <h1>{zidingyi}</h1>
      </div>
    )
  }
}
 
// 函数写法
export default (props) => {
  return (
    <div>
      <h1>子组件</h1>
      <h1>{props.msg}</h1>
    </div>
  )
}

二、子传父

1.回调函数

在父组件中定义回调函数,加在子组件的属性上,子组件调用该方法给父组件传递数据。

类方法:

父组件

import React  from "react";
import Child from "./child";
export default class Parent extends React.PureComponent{
	constructor(props){
        super(props);
        this.state = { msg: "Parent Msg" };
    }
    changeMsg = (msg) => {
        this.setState({ msg });
    }
    render() {
        return (
            <div>
                <Child changeMsg={this.changeMsg} msg={this.state.msg}/>
            </div>
        )
    }
}

子组件

import React from "react";
export default class Child extends React.PureComponent{
    render() {
	    return (
	      <div>
	        <div>接收父组件的值: {this.props.msg}</div>
	        <button onClick={() => this.props.changeMsg("改变")}>修改父组件的值</button>
	      </div>
	    )
	}
}

函数方法:

父组件:

import React  from "react";
import Child from "./child";
export default function Father(){
	const [name,setName] = useState('张三');
	
	const changeName = (name) => {
		setName(name)
	}
	return (
		<div>
			<h2>{name}</h2>
			<Child msg='i am your father' changeName={changeName} /}
		</div>
	)
}

子组件:

import React from "react";
export default function(){
	return (
    <div>
      <h1>子组件</h1>
      <button onClick={()=>{changeName('李四')}}>点击修改父亲名字</button>  
    </div>
  )
}

不相关组件,兄弟组件传递

Context

在这里插入图片描述
在这里插入图片描述

app

import React from 'react'
import Son from './son'
import context from './context'
import {Provider} from './context'

export default class App extends React.Component{
	state = {
		name: 'lisa'
	}
	render(){
		return(
			<Provider value={this.state.name}>
				<div>
					<Son />
				</div>
			<Provider/>
		)
	}
}

context

import React from 'react'

const context = React.createContext('defaultValue')

export default context  // 引入到App里面
export default const [Provider,Consumer] = context

son

import React from 'react'
import Grandson from './grandson'
import {Consumer} from './context'

export default class Son extends React.Component {
	render(){
		return (
			<Consumer>
				{
					(context) =>{
						return <div>
							my name is son :{context}
							<Grandson />
						</div>
					} 
				}
				
			</Consumer>
		)
	}
}
// 导入App里面

grandson

import React from 'react'

export default class Grandson extends React.Component {
	render(){
		return <div>my name is grandson</div>
	}
}

总结

子传父,父传子包含函数方法和类方法,可自行选择使用

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值