CSS Houdini

babel 可以编译js,让我们提前用新语法,css 就没有这个功能,现我们可以用 Houdini 来实现部分功能。

image.png

这个功能现在已经基本可用了,也有相当多的炫库效果可以使用:

https://codepen.io/thebabydino/pen/gjYavw/

纯css 的图表哦 
image.png

CSS variable

做了近年来支持最好的特性,antd 已经迁移完成。是时候用起来。
https://developer.mozilla.org/zh-CN/docs/Web/CSS/Using_CSS_custom_properties

  1. :root {
  2. --main-bg-color: brown;
  3. }
  4. element {
  5. background-color: var(--main-bg-color);
  6. }

除了 ie 全部支持了
image.png

Typescript import type

show code

  1. import type { BaseType } from "./some-module.js";
  2. import { someFunc } from "./some-module.js";
  3. export class Thing implements BaseType {
  4. // ...
  5. }

after

  1. import { someFunc, type BaseType } from "./some-module.js";
  2. export class Thing implements BaseType {
  3. someMethod() {
  4. someFunc();
  5. }
  6. }

强迫症好评

Logical Assignment Operators

如果 xxx 为false 进行赋值

  1. const a = { duration: 50, title: '' };
  2. a.duration ||= 10;
  3. console.log(a.duration);
  4. // expected output: 50
  5. a.title ||= 'title is empty.';
  6. console.log(a.title);
  7. // expected output: "title is empty"

如果 xxx 不存在进行赋值

  1. const a = { duration: 50 };
  2. a.duration ??= 10;
  3. console.log(a.duration);
  4. // expected output: 50
  5. a.speed ??= 25;
  6. console.log(a.speed);
  7. // expected output: 25

如果 xx 存在进行赋值

  1. let a = 1;
  2. let b = 0;
  3. a &&= 2;
  4. console.log(a);
  5. // expected output: 2
  6. b &&= 2;
  7. console.log(b);
  8. // expected output: 0

Numeric Separators

  1. // 两者等价
  2. const inhabitantsOfMunich = 1_464_301;
  3. const inhabitantsOfMunich = 1464301;
  4. //不等价
  5. Number('123_456'); // NaN
  6. parseInt('123_456'); // 123
  7. // 特别适合 bigint
  8. const massOfEarthInKg = 6_000_000_000_000_000_000_000_000n;

useMemo 减少变量

合理使用 useMemo 可以减少

  1. const title = useMemo(() => {
  2. if (context?.meta?.title) {
  3. return `${context.meta.title} - Ant Design Pro`;
  4. }
  5. return `Ant Design Pro`;
  6. }, [context?.meta?.title]);
  1. let title = "Ant Design Pro";
  2. if (context?.meta?.title) {
  3. title = `${context.meta.title} - Ant Design Pro`;
  4. }

Sanitizer 新功能

XSS 一直是前端非常讨厌的事情,解决方法一般都是转义和消毒。现在浏览器提供了一个新功能

  1. // our input string to clean
  2. const stringToClean = 'Some text <script>alert(1)</script> def.';
  3. const result = new Sanitizer().sanitizeToString(stringToClean);
  4. console.log(result);
  5. // Logs: "Some text "

兼容性:
image.png
既然是全红为啥要推荐使用呢? 社区已经实现了 DOMPurify,非常香。

https://github.com/cure53/DOMPurify