iis服务器助手广告广告
返回顶部
首页 > 资讯 > 前端开发 > JavaScript >React中父子组件通信详解
  • 902
分享到

React中父子组件通信详解

2024-04-02 19:04:59 902人浏览 泡泡鱼
摘要

目录父组件向子组件通信存在期父组件向子组件通信 在父组件中,为子组件添加属性数据,即可实现父组件向子组件通信。传递的数据可以分成两类 子组件是作为属性来接收这些数据的 第一类就是数据

父组件向子组件通信

在父组件中,为子组件添加属性数据,即可实现父组件向子组件通信。传递的数据可以分成两类

子组件是作为属性来接收这些数据的

第一类就是数据:变量,对象,属性数据,状态数据等等

这些数据发生改变,子组件接收的属性数据就发生了改变。

第二类就是方法:父组件可以向子组件传递属性方法,子组件接收方法,并可以在组件内执行,有两种执行方式

注意:父组件传给子组件的方法是不能执行的,执行了相当于将方法的返回值传递给子组件。

第一种 作为事件回调函数执行

参数默认就是事件对象

this默认指向undefined,因此我们要改变this指向

如果在子组件中改变,

this指向子组件

bind方式传递的参数在事件对象之前

如果在父组件中改变(​​工作中常用​​)

this指向父组件了

此时子组件不论如何绑定,都指向父组件

bind方式传递的参数会在子组件传递的参数之前

参数顺序:父组件参数,子组件参数,事件对象

第二种 在子组件方法中执行

默认没有参数,使用什么可以传递什么

this默认指向子组件属性对象(this.props)

此时我们要在父组件中绑定this,就指向了父组件

我们既可以访问父组件实例化对象,也可以访问子组件实例化对象,

我们既可以在子组件中传递参数,也可以在父组件中传递参数

有一种简写方式(​​工作中常用​​)

直接在事件回调函数中,定义箭头函数,并执行父组件方法:

// 定义父组件slider
class Slider extends Component {
// 构造函数
constructor(props) {
super(props);
// 初始化状态
this.state = {
title: '返回顶部'
}
}
// 父组件方法
parentMethod() {
console.log(this, arguments)
}
render() {
return (
<div className="slider">
{}
{}
{}
{}
{}
{}
{}
<GoTop text={this.state.title} method={this.parentMethod.bind(this, 200, 'parent')}></GoTop>
{}
</div>
)
}
}
// 定义组件
class GoTop extends Component {
// 定义方法
childMethod(e) {
// 执行父组件方法
this.props.method(200, e);
}
// 4 渲染虚拟DOM
render() {
// console.log(this.props)
// 绑定事件
// return <span onClick={this.props.method.bind(this, 100, 'child')}>{this.props.text}</span>
// 在子组件方法中执行
// return <span onClick={this.childMethod.bind(this)}>{this.props.text}</span>
// 简便写法
return <span onClick={e => this.props.method(e)}>{this.props.text}</span>
}
}

存在期

组件创建完成,一旦属性数据或者状态数据发生改变,组件就会进入存在期,共分五个阶段

第一个阶段 组件即将接收新的属性数据

componnetWillReceiveProps方法

第一个参数表示​​新的​​属性数据

组件实例化对象上的是旧的属性数据

数据还没有更新,

​只有当属性数据发生改变,才会执行该方法,状态数据改变不会执行​​,直接进入第二个阶段

作用:用属性数据去更新状态数据,实现数据由外部流入内部

第二个阶段 组件是否应该更新

shouldComponentUpdate方法

第一个参数表示​​新的​​属性数据

第二个参数表示​​新的​​状态数据

组件实例化对象上的是旧的属性数据

组件实例化对象上的是旧的状态数据

必须有返回值,表示是否可以更新

true 可以更新

false 不能更新

工作中,我们常常比较

参数中的属性数据是否与组件实例化对象中属性数据是否不相等,或者

参数中的状态数据是否与组件实例化对象中状态数据是否不相等

作用:启动更新优化的作用,常常在高频事件中使用。(类似节流作用)

第三个阶段 组件即将更新

componentWillUpdate方法:

  • 第一个参数表示​​新的​​属性数据
  • 第二个参数表示​​新的​​状态数据

组件实例化对象上的是旧的属性数据

组件实例化对象上的是旧的状态数据

说明此时数据仍然没有更新,当该方法执行完毕,数据才会更新

作用:更新插件,预处理数据等等,

注意:不要在第二个阶段和第三个阶段去更新属性数据以及装填数据

第四个阶段 组件渲染视图

render 方法

没有参数,但是此时数据已经更新了

  • 组件实例化对象上的是​​新的​​属性数据
  • 组件实例化对象上的是​​新的​​状态数据

所以我们在渲染虚拟DOM的时候,可以使用这些新的数据了

此时虚拟DOM还没有更新,方法执行完毕,虚拟DOM才更新

第五个阶段 组件更新完成

componentDidUpdate方法:

  • 第一个参数是旧的属性数据
  • 第二个参数是旧的状态数据

组件实例化对象上的是​​新的​​属性数据

组件实例化对象上的是​​新的​​状态数据

此时虚拟DOM也已经更新完成了

组件更新完成了,我们可以在这个阶段发送请求,处理事件等等,该方法执行完毕,并没有说明存在期的结束,存在期仍然继续,只是一次更新的结束,所有组件生命周期方法this都指向组件实例化对象

// 定义组件
class GoTop extends Component {
// 构造函数
constructor(props) {
super(props);
this.state = {
text: props.text
}
}
// 存在期五个阶段
// 1 组件即将接收新的属性数据
componentWillReceiveProps(newProps) {
console.log(111, 'componentWillRecieveProps', newProps, this.props)
// 将属性数据,存储到状态中
this.setState({ text: newProps.text })
}
// 2 组件是否更新
shouldComponentUpdate(newProps, newState) {
console.log(222, 'shouldComponentUpdate', newProps, this.props, 'state', newState, this.state)
// 是否可以更新
// return true;
// 根据属性或者状态的改变来优化
return newProps.text !== this.props.text || newState.text !== this.state.text
}
// 3 组件即将更新
componentWillUpdate(newProps, newState) {
console.log(333, 'componentWillUpdate', newProps, this.props, 'state', newState, this.state, findDOMnode(this).innerhtml)
}
// 4 渲染虚拟DOM
render() {
console.log(444, 'render', this.props, 'state', this.state)
// return <span>{this.props.text}</span>
return <span>{this.state.text}</span>
}
// 5 组件更新完成
componentDidUpdate(oldProps, oldState) {
console.log(555, 'componentDidUpdate', oldProps, this.props, 'state', oldState, this.state, findDOMNode(this).innerHTML)
}
// 组件创建完成
componentDidMount() {
window.onscroll = () => {
// 移动超过300显示返回顶部
if (window.scrollY > 300) {
this.setState({
text: '返回顶部'
})
} else {
// 显示头条新闻
this.setState({
text: '头条新闻'
})
}
// console.log(window.scrollY)
}
}
}

到此这篇关于React中父子组件通信详解的文章就介绍到这了,更多相关React组件通信内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: React中父子组件通信详解

本文链接: https://www.lsjlt.com/news/166205.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • React中父子组件通信详解
    目录父组件向子组件通信存在期父组件向子组件通信 在父组件中,为子组件添加属性数据,即可实现父组件向子组件通信。传递的数据可以分成两类 子组件是作为属性来接收这些数据的 第一类就是数据...
    99+
    2022-11-13
  • angular父子组件通信详解
    目录用到的api简单的例子person.ts父组件子组件效果总结用到的api Input - 子组件中定义可接受的属性,可以用来父组件给子组件传递数据 Output - 子组件中定义...
    99+
    2022-11-12
  • vue3 非父子组件通信详解
    目录第一种方法App.vueHome.vueHomeContent.vue数据的响应式修改响应式Property总结业务场景是,不是父子组件实现通信 文件目录 第一种方法 Ap...
    99+
    2022-11-12
  • React如何实现父子组件通信
    这篇文章主要介绍React如何实现父子组件通信,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!父子组件通信原理:父组件通过props(与vue中的props区分开)向子组件通信,子组件...
    99+
    2022-10-19
  • Vue组件通信之父传子与子传父详细讲解
    目录父组件传递给子组件浅谈Props子组件传递给父组件父组件传递给子组件 父组件传递给子组件:通过props属性;子组件传递给父组件:通过$emit触发事件; 这里我们知道,父组件...
    99+
    2022-11-13
    Vue组件通信 Vue组件通信父传子 Vue组件通信子传父
  • 详解Angular父子组件通讯
    目录概述一、输入输出属性概述二、输入属性三、属性绑定是单向的,从父组件到子组件四、输出属性1、先模拟一个实时变动的IBM的股票价格2、把信息输出出去,告诉组件外部,谁感兴趣谁来订阅3...
    99+
    2022-11-12
  • React父子组件传值(组件通信)的实现方法
    目录1、父组件传值子组件2、子组件传值父组件3、兄弟组件传值1、父组件传值子组件 在引用子组件的时候传递,相当于一个属性,例如:在子组件内通过porps.param获取到这个para...
    99+
    2022-11-13
  • Vue组件通信方式(父传子、子传父、兄弟通信)
    目录父组件传到子组件子组件向父组件传值非父子传参 (事件总线)vue 跨页面双向通信同源通信非同源通讯父组件传到子组件 父组件是通过props属性给子组件通信的 数据是单向流动 父&...
    99+
    2022-11-13
  • 浅析Vue中父子组件间怎么通信(父传子|子传父)
    1、父组件传递给子组件⭐⭐父组件传递给子组件:通过props属性;【相关推荐:vuejs视频教程、web前端开发】子组件传递给父组件:通过$emit触发事件;  这里我们知道,父组件有一些数据需要子组件来进行展示,那我们可以通过props来...
    99+
    2022-11-22
    组件通信 组件 Vue
  • 详解React 父组件和子组件的数据传输
    目录一、父组件向子组件传递数据 1.1、父组件代码1.2、子组件代码二、子组件向父组件传输数据 2.1、父组件代码 2.2、子组件代码 在学习 React 框架组件间数据传输知识点前...
    99+
    2022-11-12
  • React父子组件间的通信是怎样进行的
    目录父子组件通信方式父传子子传父ref标记(传递数据)非父子组件通信方式状态提升(兄弟通信)发布订阅模式context状态树传参(跨组件方案)React插槽children实现插槽多...
    99+
    2023-03-14
    React父子组件通信 React组件通信
  • React父子组件间的通信是如何进行的
    本篇内容介绍了“React父子组件间的通信是如何进行的”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!父子组件通信方式(1)传递数据(父传子)...
    99+
    2023-07-05
  • Vue非父子组件之间的通信方式详解
    目录非父子组件的通信1.Provide和Inject1.1基本使用1.2处理响应式数据(了解)2.全局事件总线总结非父子组件的通信 此篇讲解的是, 在学习状态管理之前, 非父子间通信...
    99+
    2022-11-13
  • React父组件调用子组件中的方法实例详解
    目录Class组件1. 自定义事件2. 使用 React.createRef()3. 使用回调RefsFunction组件补充:子组件调用父组件方法总结文章中涉及 ref 的应用仅为...
    99+
    2022-11-13
  • react之组件通信详解
    目录父组件与子组件通信子组件与父组件通信跨组件通信祖先子孙兄弟节点通信总结父组件与子组件通信 父组件将自己的状态传递给子组件,子组件当做属性来接收,当父组件更改自己状态的时...
    99+
    2022-11-12
  • Vue父子组件通信全面详细介绍
    目录1.Vue父子组件通信方式2.不同文件间的通信方式1 .父组件vue文件和子组件vue文件2 .父组件jsx文件和子组件vue文件3 .父组件vue文件和子组件jsx文件4 .父...
    99+
    2022-11-13
    vue的父子组件通信 vue父子组件通信例子
  • vue中非父子组件的通信你了解吗
    目录一、Provide和Inject二、Provide和Inject的另一种写法三、全局事件总线mitt库总结我们总结了父子组件通信方式有:props + emi...
    99+
    2022-11-13
  • vue3中的父子组件通讯详情
    目录一、传统的props二、通过modeValue绑定三、事件广播(vue3中$on和$emit已废弃),使用新的插件mitt一、传统的props 通过在父组件中给子组件传值,然后在...
    99+
    2022-11-13
  • Vue怎么用父组件向子组件通信
    本文小编为大家详细介绍“Vue怎么用父组件向子组件通信”,内容详细,步骤清晰,细节处理妥当,希望这篇“Vue怎么用父组件向子组件通信”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。props组件实例的作用域是孤立的...
    99+
    2023-07-04
  • Vue中父子组件间怎么通信的
    本篇内容主要讲解“Vue中父子组件间怎么通信的”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Vue中父子组件间怎么通信的”吧!Vue父子组件什么是父子组件?在一个组件中引入另一个组件,被引入的就...
    99+
    2023-06-21
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作