// 问个问题,一般在 Vue 或者 React中
// 在框架具备很多组件通讯技术或者js语法支持的情况下,什么情况下会用 Es6 的 Class类?
在Vue或React中,通常会在以下情况下使用ES6的
Class
类:
复杂组件或模块: 当需要构建较为复杂的组件或模块时,使用
Class
类可以更好地组织和管理代码,提高代码的可读性和可维护性继承与重写: 使用
Class
类可以方便地进行继承,并且可以通过重写父类的方法来定制特定的功能,以满足特定需求。生命周期管理: Vue和React都提供了一系列的生命周期函数,通过使用
Class
类来定义组件或模块,可以更好地管理和调用这些生命周期函数类成员方法与属性:
Class
类允许在类中定义成员方法和属性,这样可以更好地封装和组织代码,使其更具结构性,并且易于维护和扩展静态方法与属性: 通过使用
Class
类,还可以定义静态方法和属性,这些方法和属性属于类本身,而不是类的实例。静态方法可以作为公共工具方法,提供共享的功能面向对象编程(OOP):
Class
类是面向对象编程的重要概念之一,使用Class
类可以更好地应用面向对象编程的原则和特性,例如封装、继承和多态性综上所述,尽管Vue和React提供了很多的组件通讯技术和强大的JS语法支持,但在需要处理复杂组件或模块、继承与重写、生命周期管理、类成员的定义与组织、静态功能的实现以及面向对象编程的场景下,使用ES6的
Class
类是一个常见的选择
// 简单的树形结构工具类
export const filter = class Filter {private data: Array<any>;constructor(data: Array<any>) {this.data = data;}public buildTree(): any[] {const tree: any[] = [];this.data.forEach((item) => {if (!item.parentId) {tree.push(this.createNode(item, this.data));}});return tree;}private createNode(node: any, data: any[]): any {const children: any[] = [];data.forEach((item) => {if (item.parentId === node.id) {children.push(this.createNode(item, data));}});if (children.length > 0) {node.children = children;}return node;}public processData(): any[] {const processedData = this.data.map((item) => {return {id: item.id,name: item.name.toUpperCase(),parentId: item.parentId,};});return processedData;}
}
----------------------------------------------
const data = [{ id: 1, name: 'Root', parentId: null },{ id: 2, name: 'Node 1', parentId: 1 },{ id: 3, name: 'Node 2', parentId: 1 },{ id: 4, name: 'Node 1.1', parentId: 2 },{ id: 5, name: 'Node 1.2', parentId: 2 },{ id: 6, name: 'Leaf', parentId: 4 },
];const tree = new InitTree(data);
const builtTree = tree.buildTree();
const processedData = tree.processData();console.log(builtTree);
console.log(processedData);
[{"id": 1,"name": "Root","parentId": null,"children": [{"id": 2,"name": "Node 1","parentId": 1,"children": [{"id": 4,"name": "Node 1.1","parentId": 2,"children": [{"id": 6,"name": "Leaf","parentId": 4}]},{"id": 5,"name": "Node 1.2","parentId": 2}]},{"id": 3,"name": "Node 2","parentId": 1}]}
]