0

0

你可能没注意的一些react细节知识点!(总结)

青灯夜游

青灯夜游

发布时间:2021-02-11 08:55:53

|

2461人浏览过

|

来源于博客园

转载

react中这些细节你注意过没有?下面本篇文章给大家总结了一些你可能没注意的react细节知识点。有一定的参考价值,有需要的朋友可以参考一下,希望对大家有所帮助。

你可能没注意的一些react细节知识点!(总结)

【相关教程推荐:React视频教程

react中的一些细节知识点:

1、组件中get的使用(作为类的getter)

ES6知识:class类也有自己的getter和setter,写法如下:

Class Component {
     constructor() {
         super()
         this.name = ''
    }    
    
    // name的getter
    get name() {
        ...
    }

    // name的setter
    set name(value) {
        ...
   }
}

react组件中的get的使用如下:

/*
 *  renderFullName的getter 
 *  可以直接在render中使用this.renderFullName
 */ 

get renderFullName () {
  return `${this.props.firstName} ${this.props.lastName}`;
}

render() {
    return (
          
{this.renderFullName}
) }

那getter在react组件中有什么用处呢??

constructor (props) {
    super()
    this.state = {};
  }

    
  render () {
    // 常规写法,在render中直接计算 
    var fullName = `${this.props.firstName} ${this.props.lastName}`;

    return (
      

{fullName}

); }
// 较为优雅的写法:,减少render函数的臃肿
renderFullName () {
  return `${this.props.firstName} ${this.props.lastName}`;
}

render () {
  var fullName = this.renderFullName()   
{ fullName }
}
// 推荐的做法:通过getter而不是函数形式,减少变量
get renderFullName () {
  return `${this.props.firstName} ${this.props.lastName}`;
}

render () {
   
{ this.renderFullName }
}

如果你了解Vue的话,那么你知道其中的 computed: {}  计算属性,它的底层也是使用了getter,只不过是对象的getter不是类的getter

// 计算属性,计算renderFullName
computed: {
    renderFullName: () => {
         return `${this.firstName} ${this.lastName}`;
    }
}

Vue的computed有一个优势就是:

计算属性对比函数执行:会有缓存,减少计算 --->   计算属性只有在它的相关依赖发生改变时才会重新求值

这就意味着只要 firstName和lastName还没有发生改变,多次访问renderFullName计算属性会立即返回之前的计算结果,而不必再次执行函数。

那么是否react的getter也有缓存这个优势吗???   答案是:没有,react中的getter并没有做缓存优化

2、组件的attr及事件执行顺序:

  A、父子组件:以props形式,父传递给子

  B、同一组件:后面覆盖前面。

依靠上述规则,那么要使得 attr 的权重最高,应该放到最底层的组件中,而且位置尽量的靠后。

<-- 父组件Parent | 调用子组件并传递onChange属性 -->
<-- 子组件Child | 接收父组件onChange, 自己也有onChange属性 -->

此时,Child组件执行的onChange只是执行handleChildChange事件,handleParentChange事件并不会执行.

  • 1.如果只需要执行handleParentChange怎么办??   input中  {...this.props} 与 onChange={this.handleChildChange} 换个位置
  • 2.如果两个事件都需要执行怎么办??                      在Child组件中  handleChildChange 中执行 this.props.handleParentChange

3、类中的方法用ES6形式简写的不同之处:  fn = () => {}   与   fn() {}   的区别:

export default Class Child extends Component {
    constructor (props) {
        super()
        this.state = {};
   }

    // 写法1,这是ES6的类的方法写法
    fn1() {
         console.log(this)
        // 输出 undefined
    }
 
    // 写法2,这是react的方法写法
    fn2 = () => {
         console.log(this)
         // 输出:Child {props: {…}, context: {…}, refs: {…}, …}
    }

   render () {
        return (
          
); } }

可见两种写法,函数内的this指向时不同的。

那它们就没有相同之处吗??,  以下三种情况是相同的:

情况1:函数内部用不到this的时候,两者相等。

// 写法1,这是ES6的类的方法写法
    fn1() {
        return 1 + 1
    }
 
    // 写法2,这是react的方法写法
    fn2 = () => {
         return 1 + 1
    }

情况2:两者在render中直接执行的时候。

// 写法1,这是ES6的类的方法写法
    fn1() {
         console.log(this)
        // Child {props: {…}, context: {…}, refs: {…}, …}
    }
 
    // 写法2,这是react的方法写法
    fn2 = () => {
         console.log(this)
         // 输出:Child {props: {…}, context: {…}, refs: {…}, …}
    }

   render () {
        return (
          
); }

情况3:给this.fn2.bind(this),绑定this作用上下文。 

// 写法1,这是ES6的类的方法写法
    fn1() {
         console.log(this)
        // Child {props: {…}, context: {…}, refs: {…}, …}
    }
 
    // 写法2,这是react的方法写法
    fn2 = () => {
         console.log(this)
         // 输出:Child {props: {…}, context: {…}, refs: {…}, …}
    }

   render () {
        return (
          
); }

注意,不要和ES6中对象的方法简写弄混了,以下是对象Obeject的方法简写:

阮一峰ES6: http://es6.ruanyifeng.com/#docs/object

4、列表渲染中的数组

参考:https://doc.react-china.org/docs/lists-and-keys.html

正常的jsx写法是在render中写类似于HTML的语法,标签嵌套标签

,有js,用 { 花括号 }。

但是不知道你注意过没有,数组可以嵌套在标签内部,正常渲染。

function NumberList(props) {
    const numbers = [1,2,3,4,5];

    // listItems是数组numbers通过map返回的,本质也是个数组。 
    const listItems = numbers.map((number) =>
        
  • {number}
  • ); return (
      // 可以替换成 [
    • 1
    • ,
    • 2
    • , .....] {listItems}
    ); }

    如上所示,标签内部的数组是可以正确渲染的,那么就有以下的写法:

    renderItem(name) {
        const A = 
  • A
  • , B =
  • B
  • , C =
  • C
  • , D =
  • D
  • ; let operationList; switch (name) { case 1: operationList = [A , B, C] break; case 2: operationList = [B, C, D] break; case 0: operationList = [A] break; } return operationList; } render() {    // this.renderItem() 执行结果是数组 return (
      { this.renderItem() }
    ) }

    更多编程相关知识,请访问:编程视频!!

    热门AI工具

    更多
    DeepSeek
    DeepSeek

    幻方量化公司旗下的开源大模型平台

    豆包大模型
    豆包大模型

    字节跳动自主研发的一系列大型语言模型

    通义千问
    通义千问

    阿里巴巴推出的全能AI助手

    腾讯元宝
    腾讯元宝

    腾讯混元平台推出的AI助手

    文心一言
    文心一言

    文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

    讯飞写作
    讯飞写作

    基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

    即梦AI
    即梦AI

    一站式AI创作平台,免费AI图片和视频生成。

    ChatGPT
    ChatGPT

    最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

    相关专题

    更多
    go语言 注释编码
    go语言 注释编码

    本专题整合了go语言注释、注释规范等等内容,阅读专题下面的文章了解更多详细内容。

    32

    2026.01.31

    go语言 math包
    go语言 math包

    本专题整合了go语言math包相关内容,阅读专题下面的文章了解更多详细内容。

    23

    2026.01.31

    go语言输入函数
    go语言输入函数

    本专题整合了go语言输入相关教程内容,阅读专题下面的文章了解更多详细内容。

    16

    2026.01.31

    golang 循环遍历
    golang 循环遍历

    本专题整合了golang循环遍历相关教程,阅读专题下面的文章了解更多详细内容。

    5

    2026.01.31

    Golang人工智能合集
    Golang人工智能合集

    本专题整合了Golang人工智能相关内容,阅读专题下面的文章了解更多详细内容。

    6

    2026.01.31

    2026赚钱平台入口大全
    2026赚钱平台入口大全

    2026年最新赚钱平台入口汇总,涵盖任务众包、内容创作、电商运营、技能变现等多类正规渠道,助你轻松开启副业增收之路。阅读专题下面的文章了解更多详细内容。

    268

    2026.01.31

    高干文在线阅读网站大全
    高干文在线阅读网站大全

    汇集热门1v1高干文免费阅读资源,涵盖都市言情、京味大院、军旅高干等经典题材,情节紧凑、人物鲜明。阅读专题下面的文章了解更多详细内容。

    195

    2026.01.31

    无需付费的漫画app大全
    无需付费的漫画app大全

    想找真正免费又无套路的漫画App?本合集精选多款永久免费、资源丰富、无广告干扰的优质漫画应用,涵盖国漫、日漫、韩漫及经典老番,满足各类阅读需求。阅读专题下面的文章了解更多详细内容。

    170

    2026.01.31

    漫画免费在线观看地址大全
    漫画免费在线观看地址大全

    想找免费又资源丰富的漫画网站?本合集精选2025-2026年热门平台,涵盖国漫、日漫、韩漫等多类型作品,支持高清流畅阅读与离线缓存。阅读专题下面的文章了解更多详细内容。

    85

    2026.01.31

    热门下载

    更多
    网站特效
    /
    网站源码
    /
    网站素材
    /
    前端模板

    精品课程

    更多
    相关推荐
    /
    热门推荐
    /
    最新课程
    React 教程
    React 教程

    共58课时 | 4.5万人学习

    TypeScript 教程
    TypeScript 教程

    共19课时 | 2.6万人学习

    Bootstrap 5教程
    Bootstrap 5教程

    共46课时 | 3.1万人学习

    关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
    php中文网:公益在线php培训,帮助PHP学习者快速成长!
    关注服务号 技术交流群
    PHP中文网订阅号
    每天精选资源文章推送

    Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号