React hook祖孙组件传值(嵌套组件通讯)

  • context是一个全局变量,像是一个大容器,在任何地方都可以访问到,我们可以把要通信的信息放在context上,然后在其他组件中可以随意取到。
    但是React官方不建议使用大量context,尽管他可以减少逐层传递,但是当组件结构复杂的时候,我们并不知道context是从哪里传过来的;而且context是一个全局变量,全局变量正是导致应用走向混乱的罪魁祸首。
  • 创建context.js/ts存放上下文
import React from 'react'

const MyContext = React.createContext<string>('')
export default MyContext
  • 父组件
import React, {useState, useEffect, useRef} from 'react'
import MyContext from '@/tools/context'
import Child from './Child'
const Parent = props => {
	return (
		<MyContext.Provider value="hello world">
      		<Child/>
    	</MyContext.Provider>
	)
}

export default Parent
  • 子组件
import React, {useState, useEffect, useRef} from 'react'
import Son from './Son'
const Child = props => {
	return (
		<Son/>
	)
}

export default Child
  • 孙组件
import React, {useState, useEffect, useRef} from 'react'
import MyContext from '@/tools/context'
const Son = props => {
	return (
		<MyContext.Consumer>
      		{
        		context => <div>{context}</div>
      		}
    	</MyContext.Consumer>
	)
}

export default Son
  • 也可以使用React.useContext钩子获取上下文对象绑定的值
import React from 'react'
import MyContext from './context'

const Son = props => {
  const context = React.useContext(MyContext);
  return <div>{context}</div>
}

export default Son
React HookReact 16.8版本引入的新特性,它可以让你在不编写class的情况下使用state以及其他的React特性。如果你想要在子组件中改变父组件的状态,可以通过在父组件中定义一个函数,将这个函数作为props传递给子组件,然后在子组件中调用这个函数并传递需要改变的值。具体实现步骤如下: 1. 在父组件中定义一个函数,用于改变父组件的状态。 2. 将这个函数作为props传递给子组件。 3. 在子组件中调用这个函数并传递需要改变的值。 下面是一个示例代码: ``` // 父组件 import React, { useState } from 'react'; import ChildComponent from './ChildComponent'; function ParentComponent() { const [parentState, setParentState] = useState('父组件状态'); const handleChildChange = (childState) => { setParentState(childState); }; return ( <div> <p>父组件状态:{parentState}</p> <ChildComponent onChange={handleChildChange} /> </div> ); } export default ParentComponent; // 子组件 import React, { useState } from 'react'; function ChildComponent(props) { const [childState, setChildState] = useState('子组件状态'); const handleChange = () => { props.onChange(childState); }; return ( <div> <p>子组件状态:{childState}</p> <button onClick={handleChange}>改变父组件状态</button> </div> ); } export default ChildComponent; ``` 在这个示例中,父组件中定义了一个函数`handleChildChange`,用于改变父组件的状态。这个函数作为props传递给了子组件`ChildComponent`。在子组件中,当点击按钮时,调用`handleChange`函数,这个函数会调用父组件传递过来的`onChange`函数,并将子组件的状态`childState`作为参数传递给父组件。父组件中的`handleChildChange`函数会将子组件传递过来的状态`childState`设置为父组件的状态`parentState`,从而实现了子组件给父组件传值的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

bigHead-

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值