当前位置: 首页 > 知识库问答 >
问题:

React ES6类组件剖析

樊博雅
2023-03-14

>

  • 在ES6中直接初始化类上的属性是不可能的,目前只能用这种方式声明方法。同样的规则也存在于ES7中。

    https://stackoverflow.com/a/38269333/4942980

    render方法中的一个函数将在每个呈现中创建,这对性能有一点影响。如果你把它们放在渲染图中也很乱

    ...更喜欢只将专门处理呈现组件和/或JSX的函数放在render中(即,在prop上进行映射,根据prop有条件地加载适当组件的switch语句,等等)。如果函数背后的逻辑很重,我会把它排除在渲染之外。

    https://stackoverflow.com/a/42645492/4942980

    而且,构造函数应该只创建和初始化一个新实例。它应该设置数据结构和所有特定于实例的属性,但不执行任何任务。

    https://stackoverflow.com/a/24686979/4942980

    class Counter {
       constructor(){
         this.count = 0;
       }
    }
    

    与此相同:

    class Counter {
       count = 0;
    }
    

    我见过我的朋友这样写代码:

    let count = 0;
    
    class Counter extends React.Component {
      constructor(props) {
        super(props);
      }
      render() {
        return (
          <span>{count}</span>
        )
      }
    }
    
    ReactDOM.render(<Counter />, document.getElementById("root"));
    

    也就是说,它们习惯于用let/const/var声明变量,并在类之外声明属性(在本例中是变量),然后根据需要将其粘贴在类中,因此.js文件中填充变量,有时还有方法,然后在中间是调用它们的类。

    从更面向对象的背景来看,这在我看来是错误的?他们正确吗?所有的属性应该放在构造函数中还是在类中(如果它们不处理显式呈现),或者如果它们处理,应该放在呈现方法中?或者,是否可以使用let这样的变量关键字进行声明,然后根据需要使用它们的作用域将它们放在类中,无论是构造函数还是呈现方法等?如果每个.js文件只有一个类,那么这是否可以呢?

  • 共有1个答案

    薛飞星
    2023-03-14

    这是否意味着类的所有变量,不是方法,不属于呈现,都属于类构造函数?

    对于本机JS(换句话说,在浏览器中标准化和支持的ES语法)来说是如此,但是对于TypeScript来说,您将使用类属性(使用Babel也可以这样做):

    class Counter {
       count = 0;
    }
    

    这是第3阶段ES建议语法。事实上,几乎每个人都在使用Babel或TypeScript与React一起使用,我很惊讶将类属性和绑定方法放在构造函数中的想法仍然被如此广泛地推荐,这只在旧代码中是必要的。就我个人而言,我使用打字稿,几乎从不这样做。

    声明类属性在TypeScript中特别有用,因为这是定义类类型本身的方式(即countcounter的属性)。否则,您需要处理类型错误:

    class Counter {
      constructor() {
        this.count = 3; // Error: Property 'count' does not exist on type 'Counter'.
      }
    }
    

    我见过我的朋友这样写代码:

    let count = 0;
    
    class Counter extends React.Component {
      constructor(props) {
        super(props);
      }
      render() {
        return (
          <span>{count}</span>
        )
      }
    }
    

    也就是说,他们习惯于用let/const/var声明变量,并在类之外声明属性(在本例中是变量),然后根据需要将其粘贴在类中

    是啊,看起来不对。

    class Counter {
      static count = 0;
    }
    
     类似资料:
    • 本文向大家介绍剖析ASP.NET MVC的DependencyResolver组件,包括了剖析ASP.NET MVC的DependencyResolver组件的使用技巧和注意事项,需要的朋友参考一下 一、前言   DependencyResolver是MVC中一个重要的组件,从名字可以看出,它负责依赖对象的解析,可以说它是MVC框架内部使用的一个IOC容器。MVC内部很多对象的创建都是通过它完成的

    • 本文向大家介绍深入剖析JavaScript:Object类型,包括了深入剖析JavaScript:Object类型的使用技巧和注意事项,需要的朋友参考一下 在JavaScript中,引用类型是一种数据结构,用于将数据和功能组织在一起。 对象是某个特定引用类型的实例。对象的创建方式: 上面的例子创建了Object引用类型的一个新实例,然后把该实例保存在变量person中。 创建对象有构造函数和对象字

    • 11.5. 剖析 基准测试(Benchmark)对于衡量特定操作的性能是有帮助的,但是当我们试图让程序跑的更快的时候,我们通常并不知道从哪里开始优化。每个码农都应该知道Donald Knuth在1974年的“Structured Programming with go to Statements”上所说的格言。虽然经常被解读为不重视性能的意思,但是从原文我们可以看到不同的含义: 毫无疑问,对效率的

    • 以下各节的脚本展示了如何通过监控函数调用来剖析(profile)内核活动。 统计函数调用次数 本节展示如何统计30秒内某个内核函数调用次数。通过使用通配符,你可以用这个脚本同时统计多个内核函数。 functioncallcount.stp #! /usr/bin/env stap # The following line command will probe all the functions #

    • 这一小节我们主要介绍用 Django 开发的项目的几个重要组成部分以及操作的相关命令。 1. Django 项目说明 Django 项目主要是由多个 app 组成,app 这个概念特别像 Java 中的模块。我们将实现不同的功能放到不同的 app 中,这样会让整个项目结构看起来清晰分明。此外,在 Django 给我们生成的初始化工程以及初始化应用中的代码文件都有着相应的含义,我们需要遵循 Djan

    • 到目前为止,我们只是载入文档,然后再输出它。 现在看看更让我们感兴趣的剖析树: Beautiful Soup剖析一个文档后生成的数据结构。 剖析对象 (BeautifulSoup或 BeautifulStoneSoup的实例)是深层嵌套(deeply-nested), 精心构思的(well-connected)的数据结构,可以与XML和HTML结构相互协调。 剖析对象包括2个其他类型的对象,Tag