2022-03月开发小结

103 阅读2分钟

知识点

  1. Object.assign()会过滤掉后面的与第一个参数全等的参数。
const a = { name: 'a' };
const b = { name: 'b' }
Object.assign(a, b);
// {name: 'b'}
const a = { name: 'a' };
const b = { name: 'b' }
Object.assign(a, b, a);
// {name: 'b'}
const a = { name: 'a' };
const b = { name: 'b' }
Object.assign(a, b, { ...a });
// {name: 'a'}

image.png

相当于 Object.assign(a, b, c)

  1. css动画,进行一半被隐藏(display: none)后,再次展示时,动画会重新开始。

  2. 使用正则表达式格式化金额(千分位使用,分隔)。

'123456789.00'.replace(/(?<!^)(?=(\d{3})+\.)/g, ',');

image.png

  • 将这个正则表达式分为两部分:(?<!^)(?=(\d{3})+\.);
  • (?<!^)这是一个负向零宽后行断言(?<!exp),表示目标字符出现的位置的前边不能是符合exp表达式的,即不能符合^,也就是后面这部分(?=(\d{3})+\.)匹配到的结果不能是从开头(^)开始的。
  • (?=(\d{3})+\.))这是一个正向零宽先行断言(?=exp),表示目标字符出现的位置的后边必须匹配这个exp,即匹配到的位置后边必须符合(\d{3})+\.
  • (\d{3})+\.该表达式可以匹配789.456789.123456789.,正向零宽先行断言匹配的是它们前面的位置,由于不能是从开头开始,所以只匹配到789.456789.前面的位置。
  • 将这些匹配到的位置替换为,

补充

  • 金额数字不一定包含小数点。
'123456789'.replace(/(?<!^)(?=(\d{3})+(\.|\b))/g, ',');

image.png

  • (?<!^)要求前边不能是开头,也可以换成前面必须是数字(?<=\d)

image.png

业务总结

  1. 在下一次请求返回之前保持当前页面状态(上一次请求数据)。
    • 请求前,将当前页面状态(curState)赋给一个变量prevState
    • 请求后,将数据重新赋给curState,并将prevState清空;
    • 页面展示的状态为 prevState || curState,使用计算属性。