react组件通信

目录

父子组件

父传子props

子传父:回调函数作为props的值传给子组件,形参接受数据

[跨组件通信Context API](#跨组件通信Context API)

context.provider/consumer

[避免 props 层层传递:context](#避免 props 层层传递:context)

滥用:依赖关系混乱、难扩展、测试


父子组件

父传子props

子传父:回调函数作为props的值传给子组件,形参接受数据

1、父组件提供一个回调函数 (其参数 用于接受数据 )

2、将函数作为属性的值 ,利用props ,传递给子组件

3、子组件通过props获取到父组件传递过来的西数,并旦地调用 这个函数。

4、将子组件中想要传递给父组件的数据,作为参数传递给这个函数。

javascript 复制代码
//父组件
import Child from '../Child/index'

const Parent = () => {

    const onClick = (value) => {
        console.log('子组件传来了',value)
    }
    return(
            <Child click={onClick} />
    )
}

export default Parent
javascript 复制代码
//子组件
const Child = (props) => {
    const handleClick = (value) => {
        props.click(value)
    }
    return(
        <div  onClick={()=>{handleClick(1)}}> </div>
    )
}

export default Child

跨组件通信Context API

context.provider/consumer

Welcome传递给Title:

javascript 复制代码
let MyContext = React.createContext();

class Welcome extends React.Component {
    state = {
        msg: 'welcome组件的数据'
    }
    render(){
        return (
            <div>
                Hello Welcome

                <MyContext.Provider value={this.state.msg}>
                    <Head />
                </MyContext.Provider>

            </div>
        );
    }
}
class Head extends React.Component {
    render(){
        return (
            <div>
                Hello Head
                <Title />
            </div>
        );
    }
}
class Title extends React.Component {
    static contextType = MyContext
    componentDidMount = () => {
        console.log( this.context );
    }
    render(){
        return (
            <div>

Hello Title <MyContext.Consumer>{ value => value }</MyContext.Consumer>

            </div>
        );
    }
}
let element = (
    <Welcome />
);

通过<MyContext.Provider>组件携带value属性进行向下传递的,

那么接收的语法是通过<MyContext.Consumer>组件。

也可以定义一个静态方法static contextType = MyContext,这样就可以在逻辑中通过**this.context**来拿到同样的值。

避免 props 层层传递:context

滥用:依赖关系混乱、难扩展、测试

相关推荐
码艺-Alimjan19 分钟前
Vben Admin 新增维吾尔语 Vben-Modal的关键坑之一
前端·javascript·vue.js
可乐鸡翅yeah_1 小时前
hls.js 手动自定义 http 请求 loader,修改请求头实战
开发语言·前端·javascript·网络协议·http·ecmascript·m3u8在线
IT_陈寒1 小时前
Vite静态资源导入这个坑我帮你们踩过了
前端·人工智能·后端
广州华水科技1 小时前
大坝安全监测解决方案:单北斗GNSS形变监测系统应用与维护
前端
yivifu2 小时前
中文古籍电子书注释集成
前端·javascript·python·beautifulsoup·epub
weixin_448290253 小时前
书庐开发实战教学
javascript·css·html
默_笙3 小时前
🛴 从散件到整机:DeepAgents 与 Agent 身上预留的那些"插槽"(前置介绍)
前端·javascript
zhangzeyuaaa3 小时前
深入理解 Ruby 运算符:本质、分类、坑点与重载实战
开发语言·前端·ruby
一木 之林3 小时前
DeepSeek Agent 开发(一)
开发语言·前端·javascript
树下水月4 小时前
Typora破解
linux·服务器·前端