react函数式组件通信

父亲通过props给子传递信息

父组件:
import Son1 from './Son1' //引入子组件
import { useState } from 'react'
function Father(){
	let [text, setText] = useState(0)
	return (
    <>
      <Son1 text={text}></Son1>
    </>
  )
}
export default Father

子组件:
// props={text}
function Son1({text}){
	return (
    <>
      <p>父亲传过来的:{text}</p> //这里使用父亲传过来的text
    </>
  )
}
export default Son1

子组件通过触发回调事件给父亲传递消息:

父组件:
import Son1 from './Son1' //引入子组件
import { useState } from 'react'

function Father(){
	let [text, setText] = useState(0)
	const getHandle = (num) => {
   		 console.log('儿子说给text加上:', num)
   		 setText(text+num)
  	 }
	return (
    <>
      <Son1 text={text} emitHandle={getHandle}></Son1>
    </>
  )
}
export default Father

子组件:
// props={text,emitHandle}
function Son1({text,emitHandle}){
	return (
    <>
      <p>父亲传过来的:{text}</p> //这里使用父亲传过来的text
      <button onClick={() => emitHandle(1)}>点我emit父亲</button>
    </>
  )
}
export default Son1

兄弟之间通信,把父组件当作中间件

父组件:
import Son1 from './Son1' //引入子组件
import Son2 from './Son2' //引入子组件
import { useState } from 'react'

function Father(){
	let [text, setText] = useState(0)
	const getHandle = (num) => {
   		 console.log('兄弟说给text加上:', num)
   		 setText(text+num)
  	 }
	return (
    <>
      <Son1 text={text}></Son1>
      <Son2 add={getHandle}></Son2>
    </>
  )
}
export default Father

子组件1// props={text,emitHandle}
function Son1({text,emitHandle}){
	return (
    <>
      <p>父亲传过来的:{text}</p> //这里使用父亲传过来的text 通过兄弟来改变值
    </>
  )
}
export default Son1

子组件2// props={text,emitHandle}
function Son2({text,emitHandle}){
	return (
    <>
      <button onClick={() => emitHandle(1)}>给兄弟加1</button>
    </>
  )
}
export default Son2

全局公共变量 createContext / useContext

父组件:content.js
import Son1 from './Son1' //引入子组件
import { useState,createContext } from 'react'

export const CountContext = createContext({}) //创建数据源  关键

function Father(){
	let [title, setTitle] = useState('公共数据')
 	const changeCom = (value) => {
    	setTitle((title = value))
    }
	return (
    <>
     //使用CountContext.Provider包裹子组件 value 是公共使用的数据  可以通过传递函数进行你想要的一些操作
     // CountContext也就是你上面自己取的名字
     <CountContext.Provider value={{ title,change:(value)=>changeCom(value) }}>
      	<Son1></Son1>
      </CountContext.Provider>
      <button onClick={() => changeCom('我是父亲,我修改了公共数据')}></button>
    </>
  )
}
export default Father

子组件:Son1.js
import { useContext } from 'react'
import { CountContext } from './content'  // 关键

// props={text}
function Son1(){
	let data = useContext(CountContext) // 获取公共数据  关键
	return (
    <>
      <p>{data.title}</p> //使用公共数据
       <button onClick={() => data.change('我是儿子,我修改了公共数据')}></button>
    </>
  )
}
export default Son1
  • 1
    点赞
  • 11
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值