【react】基础知识补充及原理【粗略版】
admin
2024-03-16 12:07:12
0

1.补充知识

1.PureComponent和React.Component的区别

PureComonent默认给类组件添加了一个shouldComponentUpdate的钩子函数,在这个钩子中,会对新旧状态及属性做一个浅比较,以此达到优化组件渲染的目的。

2.基于ref获取DOM元素的语法

1.给原生元素设置ref

给需要获取dom的元素设置ref='xxx',然后使用this.refs.xxx进行获取,不建议使用,在React.StrictMode模式下会报错

render() {return 

温馨提示

; } componentDidMount() {console.log(this.refs.titleBox); }

将ref设置为一个函数,并将ref的形参(dom元素)挂载到实例上

render() {return 

this.box2 = x}>友情提示

; } componentDidMount() {console.log(this.box2); }

基于React.createRef()创建一个ref对象,初始化时为null 

box3 = React.createRef();render() {return 

郑重提示

; } componentDidMount() {console.log(this.box3.current); }

2.给组件设置ref

类组件:获取当前组件的实例,通常用于父子组件传值及方法调用

class Demo extends React.Component {render() {return 
//子组件 this.child1 = x} />
;}componentDidMount() {console.log(this.child1);} }

 函数组件:获取函数组件内部某个元素。需要使用React.forwardRef()包裹子组件,这是函数子组件将拥有除props外的另一个形参:ref。通过把该形参设置给函数子组件中的某个元素,来达到获取函数子组件中dom元素的目的。

import React from "react";const Child2 = React.forwardRef(function Child2(props, ref) {// 该ref形参为给子组件设置的ref值: x => this.child2 = xreturn 
子组件2
; });class Demo extends React.Component {render() {return
this.child2 = x} />
;}componentDidMount() {console.log(this.child2); //子组件内部的button按钮} }

3.React中的插槽

基于子组件中props.children获取传递的插槽信息(子节点信息)。

  + 调用组件时,基于双闭合调用方式把插槽信息(子节点信息)传递给组件,组件内部进行渲       染

const DemoOne = function Demo(props) {let { title, children } = props;return 

{title}


{children}
; };//传递时 //编译为vdom后作为props.children的值
我是插槽内容

具名插槽

import React from 'react';
const DemoOne = function Demo(props) {let { title, children } = props;// 对children的类型做处理// 可以基于 React.Children 对象中提供的方法,对props.children做处理: count\forEach\map\toArray... 在这些方法的内部,已经对children的各种形式做了处理children = React.Children.toArray(children);let headerSlot = [],footerSlot = [],defaultSlot = [];children.forEach(child => {// 传递进来的插槽信息,都是编译为virtualDOM后传递进来的,而不是传递的标签let { slot } = child.props;if (slot === 'header') {headerSlot.push(child);} else if (slot === 'footer') {footerSlot.push(child);} else {defaultSlot.push(child);}});return 
{headerSlot}

{title}


{footerSlot}
; };我是页脚我是匿名的我是页眉

相关内容

热门资讯

迎接50万亿存款迁徙|搬家的钱... 开栏语:一场规模高达50万亿的存款迁徙正蓄势待发。站在财富配置的历史拐点,如何审视这波天量资金的洪流...
大连航天医院费用公开透明|下肢... 大连航天医院静脉曲张专科学科带头人杨红东:下肢静脉曲张在人群中发病率大概在7%左右。下肢静脉曲张最主...
【锋行链盟】A轮融资流程及核心... A轮融资是创业公司发展的重要里程碑,通常发生在种子轮/天使轮之后、B轮之前。此时公司已完成产品验证(...
原创 未... 在快速变化的时代,把握趋势往往意味着抓住先机。本文将深入探讨十大关键发展趋势,它们不仅塑造着我们的生...
太突然!002855,71岁董... 每经记者|蔡鼎 每经编辑|何小桃 董兴生 2月27日晚间,捷荣技术(SZ002855,股价16.4...
原创 今... 2026年2月27日,你走进周大福金店,柜姐微笑着告诉你今日金价是每克1576元。 你或许觉得这个价...
致远互联2025年实现营收9.... 本报讯 (记者向炎涛)2月27日,北京致远互联软件股份有限公司(以下简称“致远互联”)发布2025年...
A股突发!600481,被证监... 【导读】双良节能因涉嫌信息披露误导性陈述等违法违规行为被立案 中国基金报记者 夏天 公司表示,目前...
高人预测:5年后,手持两套房以... 前几年,谁家要是两三套房,那简直就是“别人眼里的成功模板”。 过年亲戚一坐,有人开口就是:“早听我的...
刘强东雷军同框C位!中德交流排... 今年刘强东和雷军同框的画面好像有点多哦。 在2月25号下午的中德经济顾问委员会座谈会上,刘强东和雷军...
万达20亿元转让上海颛桥万达广... 财联社2月27日电,记者从独立信源处获悉,万达以20.48亿元的价格出售了旗下位于上海的颛桥万达广场...
德邦基金“大V带货”风波后,8... 作者 | 郑理、刘银平 来源 | 独角金融 2月14日,德邦基金一纸公告,揭开了公司管理层的重要调整...
央行出手!远期售汇风险准备金率... 时隔3年半,央行再次下调远期售汇风险准备金率。 2月27日,中国人民银行发布公告称,决定自2026年...
三千万落地,山西6600亿重点... 2月28日,山西高速集团股份有限公司(以下简称“山西高速”)发布关于实际控制人增持股份计划实施完成的...
原创 太... 昨天看到一则有意思的新闻: “韩国政府数据显示,2025年总和生育率升至0.80%,较2024年的0...
原创 意... 美国关税带来的冲击已经对全球经济格局产生了影响。报道显示,意大利在2025年下半年的全球出口额超过了...
原创 A... 上证指数月线3连阳了,不出意外的话就又要创10年新高了。 从盈亏角度,体感很不好,不是没有上涨而是所...
Jellycat卖爆背后:Z世... 文丨特约撰稿 阿杜 刚刚结束的春节期间里,春晚无疑是最为关注的热门词之一,如果不是重温12年前的这场...
京津冀地区去年进出口值4.7万... 从天津海关获悉,京津冀协同发展上升为国家战略以来,京津冀地区进出口值从2014年的3.74万亿元增至...
绝对稀缺资源!吃透【稀土+小金... 很多人都在担心,AI 是否会抢走自己的饭碗。 但很多人没意识到,AI 再厉害,也造不出地下的稀缺资源...