React函数组件-插槽(slot)
React与Vue中的插槽React和Vue都有插槽(slot)的概念,插槽(Slots)是一个组件化框架中的重要特性,它们用于组件的内容组合与布局。无论是在React还是在Vue中,插槽都扮演着类似的角色,即允许开发者将内容插入到组件的预留位置。其主要作用包括但不限于:
内容分发:插槽允许开发者定义组件的结构,在使用组件时可以动态插入内容。这让组件更加灵活,可以在不同的情况下重复使用。
自定义模板:通过插槽,父组件可以控制插入到子组件的内容的结构和样式。这个过程中,子组件不需要关心内容的具体实现,只需要提供插槽作为占位符。
代码复用:插槽可以减少重复代码。例如,你可能有一个模态框组件,它的头部、正文和尾部都可以使用插槽来自定义,这样你就可以重复使用同一个模态框组件,但每次都插入不同的内容。
作用域隔离:插槽可以帮助维持清晰的父子组件间的界限。子组件不需要知道父组件传递的具体内容,只关心插槽本身的位置和必要的数据接口。
提高性能:在某些情况下,使用插槽可以避免不必要的组件渲染,因为你可以控制何时和如何渲染插槽内容。
高级模式:Vue中的作用域插槽甚至可以让子组件传递数据回父 ...
React组件化开发-函数组件
React函数组件React 函数组件是一种定义组件的方式,它通过纯函数的形式接收属性(props)并返回应当渲染的React元素。比起传统的基于类(class-based)的组件,函数组件通常更为简洁,因为它们不涉及React组件生命周期的管理,也不提供内置的this上下文。使用函数组件可以通过钩子(Hooks)如useState和useEffect等来利用React的状态管理和副作用处理能力。
渲染逻辑非常直接:当函数组件被渲染时,React调用它,传入props和上下文context(如果有使用的话)。组件执行并返回JSX,JSX随后被React转换成虚拟DOM,最后映射到实际的DOM中以展示在用户的屏幕上。每当组件的状态或者props变化时,组件函数会被重新调用并渲染出新的JSX,这样React就可以更新DOM以匹配新的输出。
函数组件的使用非常简单,定义一个函数,返回JSX,然后在需要的地方渲染它,就像使用普通的React元素一样。这种方式提高了代码的可读性与可维护性,并使得组件之间的复用和测试变得更加容易。
函数组件创建及使用
创建函数组件
123456789101112 ...
React render
Virtual Dom转化为真实DOM在 React 中,Virtual DOM(虚拟 DOM)是一个轻量级的 JavaScript 对象,它是真实 DOM 的一个表示。React 使用这个表示来优化 DOM 操作,提高性能。渲染 Virtual DOM 到真实 DOM 的过程通常是自动完成的,但理解这个过程可以帮助你更好地理解 React 的工作机制。
React 使用以下步骤将 Virtual DOM 渲染成真实 DOM:
组件更新:当一个 React 组件的状态(state)或属性(props)发生变化时,React 会更新该组件的 Virtual DOM。
生成 Virtual DOM:React 会调用组件的 render 方法,根据组件的最新状态和属性来生成一个新的 Virtual DOM 树。
Diff 算法:React 使用 Diff 算法比较新的 Virtual DOM 树与上一次的 Virtual DOM 树的差异。这个过程称为重新协调(reconciliation)。
确定 DOM 更新:Diff 算法确定了在 Virtual DOM 树中哪些地方发生了变 ...
React JSX
JSXJSX 的全称是 JavaScript XML。在 React 中,JSX 是 JavaScript 的一个语法扩展,它允许你在 JavaScript 代码中写类似于 HTML 的标记。JSX 是 React 元素的语法糖,它让创建 UI 变得直观和简单。在编译过程中,这些标记会被转换为 React.createElement 调用。
下面是 JSX 的一些特点:
声明式创建 UI:可以像编写 HTML 那样编写 JSX,但其背后是 JavaScript 的强大功能。
可嵌入 JavaScript 表达式:可以在 JSX 中嵌入任何有效的 JavaScript 表达式,只需将其放入大括号 {} 中即可。
组件和 HTML 标签的结合:在 JSX 中,可以像使用 HTML 标签一样使用 React 组件。
属性使用 CamelCase 命名法:JSX 中的属性采用驼峰命名法(CamelCase),而不是 HTML 中的小写。例如,class 变成了 className,tabindex 变成了 tabIndex。
条件与循环:可以使用 JavaScript 的 ...
React start
第一个React程序确保有合适的环境确保设备上已经安装了Node.js和npm。你可以在终端运行以下命令来检查它们是否已安装:
12node -vnpm -v
如果还没有安装Node.js,请前往Node.js官网下载并安装。
创建React应用打开终端,运行以下命令来创建一个新的React项目:
1npx create-react-app my-react-app
这里,my-react-app是你的项目名称,你可以将其更换为你喜欢的名称。npx是一个npm 5.2+附带的包运行工具,它可以运行Registry中的包而不需要全局安装它们。
创建成功后进入项目目录my-react-app下,项目默认结构如下:
123456├── README.md├── node_modules├── package-lock.json├── package.json├── public└── src
此时可以通过以下命令启动本地开发服务器:
123npm run startyarn start // 官方文档推荐使用yarn对react项目进行包管理及项目脚本的执行
这将自动打开你的默认浏览 ...
Node.js全局变量
JavaScript
JavaScript由以下几部分组成:
ECMAScript:JavaScript的核心语言部分,规定了语法、类型、语句、关键字、保留字、操作符、对象等。
DOM(文档对象模型):提供了访问和操作网页内容的方法和接口。
BOM(浏览器对象模型):提供了与浏览器交互的方法和接口,例如弹出新窗口、移动、缩放和关闭窗口等。
Node.js和浏览器都是JavaScript的运行环境,但它们之间有一些区别。
全局对象:在浏览器中,全局对象是window,而在Node.js中,全局对象是global。
API:浏览器和Node.js都提供了一些API,但它们之间的API有所不同。例如,浏览器提供了window.document对象,而Node.js提供了fs模块来操作文件系统。——由于nodejs中没有DOM和BOM,除了这些API,其他的ECMAscriptAPI基本都能用
模块系统:在浏览器中,模块系统通常使用<script>标签来加载脚本文件。在Node.js中,使用require()函数来加载模块。
异步编程:在浏览器中,异步编程通常使用回调 ...
Node.js模块化
CommonJS和ESM(ECMAScript Modules)是两种不同的模块化规范。
CommonJS是Node.js最初采用的模块化规范,它使用require函数来引入模块,使用module.exports或exports来导出模块。CommonJS模块是同步加载的,也就是说,当一个模块被引入时,它会立即执行模块中的代码,并将module.exports或exports对象作为模块的输出。
ESM是ES6引入的模块化规范,它使用import语句来引入模块,使用export语句来导出模块。ESM模块是异步加载的,也就是说,当一个模块被引入时,它不会立即执行模块中的代码,而是等到所有依赖的模块都加载完成后再执行。
CommonJS 规范
支持引入自己编写的模块
支持引入第三方模块
支持引入node内置模块
支持引入json文件
支持引入addon c++扩展模块, 一般用不到,需要借助node-gyp编译成二进制.node文件
123456789101112131415// commonjs规范// 1. 引入自己的模块const export = require(' ...
Redis
什么是Redis为什么要用Nosql 在请求量小的情况下,使用mysql不会有任何问题,但是一旦同时有成千上万个请求同时来访问系统时,就会出现卡顿甚至系统崩溃的情况。最典型的例子就是早期的12306购票网站,一旦到了购票高峰期,12306肯定崩溃。造成这个原因的罪魁祸首就是关系型数据库。
关系型数据库存在两个问题:
性能:磁盘IO性能低下
扩展性:数据关系复杂,扩展性差,不利于大规模集群
为了解决这两个问题,非关系类型数据库出现了,非关系类型数据库有两个特点:
内存存储 :解决磁盘IO性能低的问题
不存储关系,只存储数据 : 解决数据关系复杂的问题
NoSQL的常见产品:redis、mongdb
redis介绍 Redis-Remote Dictionary Server。是用C语言开发的一个开源的高性能键值对(key-value)数据库,是一种内存数据库。支持内存运行并支持持久化的NoSQL数据库,有如下几个特征:
数据间没有必然的联系
内部采用单线程机制工作
性能高,支持每秒十几万次的读写操作
多数据类型支持:字符串类型(string)、列表类型(list)、 ...
MyBatis
什么是MyBatis
MyBatis 是一款优秀的持久层框架,它支持自定义 SQL、存储过程以及高级映射。
MyBatis 免除了几乎所有的 JDBC 代码以及设置参数和获取结果集的工作。
MyBatis 可以通过简单的 XML 或注解来配置和映射原始类型、接口和 Java POJO(Plain Old Java Objects,普通老式 Java 对象)为数据库中的记录。
官方文档:https://mybatis.org/mybatis-3/zh/getting-started.html
持久层定义:
完成持久化工作的代码块
层的界限十分明显
数据持久化
持久化就是将程序的数据在持久状态和瞬时状态转化的过程
内存:断电即失
数据库(jdbc)、io文件持久化
为什么需要持久化
不能丢掉的对象
节约内存
为何选择MyBatis
灵活性:MyBatis允许您直接编写原生的SQL语句,提供了很高的灵活性。您可以根据需要编写任何复杂的SQL,从而满足各种业务需求
易于使用:MyBatis通过XML配置文件和注解,让您可以轻松地将SQL语句与Java代码分离,使得代码结构更 ...
ts-高级语法
类的装饰器随着TypeScript和ES6里引入了类,在一些场景下我们需要额外的特性来支持标注或修改类及其成员。 装饰器(Decorators)为我们在类的声明及成员上通过元编程语法添加标注提供了一种方式。TypeScript里已做为一项实验性特性予以支持。
注意:装饰器是一项实验性特性,在未来的版本中可能会发生改变。
要启用实验性的装饰器特性,必须在命令行或tsconfig.json里启用experimentalDecorators编译器选项:
命令行:
1tsc --target ES5 --experimentalDecorators
tsconfig.json:
1234"compilerOptions": { "experimentalDecorators": true, /* Enable experimental support for legacy experimental decorators. */ "emitDecoratorMetadata": true, /* Emit de ...