bytedance(2)

字节实习记录


一、关于样式less

less是一门CSS扩展语言,也可以说是CSS预处理器。less简称(Leaner Style Sheets),它相比css新增了如下功能:变量、函数、作用域等等。它的优点是:更具有维护性、扩展性等,可以降低了维护的成本。

1.1 变量部分

组件FeedListLoadingTip.vue变量设置:rotate_duration: 450ms为声明的变量并给定了值,随后使用@rotate_duration引用。

rotate_duration: 450ms;
.loading-tip {
  padding: 9px 0;
  font-size: 13px;
  line-height: 18px;
  &.loading {
    color: #999;
    .loading-icon {
      display: inline-block;
      width: 17px;
      height: 17px;
      border-radius: 50%;
      animation: rotate @rotate_duration ease-in infinite;
      margin-right: 10px;
    }
  }

1.2 &的用法:

• &:表示父选择器,可以将父子关系变为并且关系,如组件FeedListLoadingTip.vue中:

SCSS
.loading-tip {
  padding: 9px 0;
  font-size: 13px;
  line-height: 18px;
  .test{
    color: #999;
    }
  &.loading {
    color: #999;
    }
   }
进过css编译,即得到如下结果:

CSS
.loading-tip{}
.loading-tip .test{} //父子关系
.loading-tip.loading{} //并且关系
如果&符号在loading后面:.loading&{时,则有父子关系转变:

二、data中的属性的后续添加

2.1 this.$set的方式添加

代码如下(示例):

  //来自组件oppoV2/AuthorCollections.vue
 this.$set(this.feedListData, tab.type, {
        loadingStatus: '',
        loading: false,
        loadingTip: '精彩内容正在加载…',
        hasMore: true,
        offset: '',
        cardList: [],
      });

• 使用this.$set做添加是因为常规的在methods中新添加属性时,即使添加上了,视图层也并没有更新该数据,vue不能监听对象属性的添加和删除,因为在vue组件初始化的过程中,会调用getter和setter方法,所以该属性必须是存在在data中,视图层才会响应该数据的变化,使用this.$set为对象添加属性之后,他的对象身上多了set方法,所以,此时再次操作该属性的时候,就会引起视图的更新。

三、 异步操作

3.1 async结构

  • async和await关键字让我们可以用一种更简洁的方式写出基于Promise的异步行为,而无需刻意地链式调用promise。
  • async函数可能包含多个await表达式。await表达式会暂停整个async函数的执行进程并出让其控制权,只有当其等待的基于promise的异步操作被兑现或被拒绝之后才会恢复进程。promise的解决值会被当作该await表达式的返回值。
async handleExport() {
      try {
        this.loading = true;
        const queryParams = generateQueryParams(this.queryParams);
        await whiteListService.download(queryParams);
      } catch (e) {
        console.log(e);
      } finally {
        this.loading = false;
      }
    }

触发try,等待whiteListService.download方法获得返回结果,然后进程结束,触发finally部分结束这个async。catch是捕捉发生的错误。
代码如下(示例):

3.2 promise

2.3.1 promise all

  • Promise.all(promiseArray)方法是Promise对象上的静态方法,该方法的作用是将多个Promise对象实例包装,生成并返回一个新的Promise实例。
  • 在上面的方法中,promise数组中所有的promise实例都变为resolve的时候,该方法才会返回,并将所有结果传递results数组中。promise数组中任何一个promise为reject的话,则整个Promise.all调用会立即终止,并返回一个reject的新的promise对象。reject使用示例如下:
const promise1 = Promise.resolve(3);
const promise2 = 42;
const promise3 = new Promise((resolve, reject) => {
  setTimeout(reject, 5000, 'foo');
});

Promise.all([promise3, promise2, promise1]).then((values) => {
  console.log(values);
});




var p1 = Promise.resolve(1),
    p2 = Promise.reject(2),
    p3 = Promise.resolve(3);
Promise.all([p1, p2, p3]).then(function (results) {
    //then方法不会被执行
    console.log(results); 
}).catch(function (e){
    //catch方法将会被执行,输出结果为:2
    console.log(2);
});

2.3.2 promise resolve

Promise.resolve(value);

value将被Promise对象解析的参数,也可以是一个Promise对象,或者是一个thenable。返回一个带着给定值解析过的Promise对象,如果参数本身就是一个Promise对象,则直接返回这个Promise对象, 静态方法 Promise.resolve返回一个解析过的Promise对象。

const promise1 = Promise.resolve(123);

promise1.catch((value) => {
  console.log(value);
  // expected output: 123
});

2.3.3 promise的链式结构

  • 上一个的输出返回值作为下一个的输入,即使没有return也会进行下一个。当 .then() 中缺少能够返回 promise 对象的函数时,链式调用就直接继续进行下一环操作。因此,链式调用可以在最后一个 .catch() 之前把所有的 handleRejection 都省略掉。类似地, .catch() 其实只是没有给 handleFulfilled 预留参数位置的 .then() 而已。
  • 链式调用中的 promise 们就像俄罗斯套娃一样,是嵌套起来的,但又像是一个栈,每个都必须从顶端被弹出。链式调用中的第一个 promise 是嵌套最深的一个,也将是第一个被弹出的。

在这里插入图片描述

四、this.$nextTick()的回调应用

• this.$nextTick()将回调延迟到下次 DOM 更新循环之后执行。在修改数据之后立即使用它,然后等待 DOM 更新。它跟全局方法 Vue.nextTick 一样,不同的是回调的 this 自动绑定到调用它的实例上。

his.$nextTick(() => {
          this.$refs.form.validate();
        });

五、关于对前端传入后端的数据做改动

5.1 trim

trim() 方法会从一个字符串的两端删除空白字符。在这个上下文中的空白字符是所有的空白字符 (space, tab, no-break space 等) 以及所有行终止符字符(如 LF,CR等)。

5.2 set

Set对象是值的集合,你可以按照插入的顺序迭代它的元素。 Set中的元素只会出现一次,即 Set 中的元素是唯一的。此处的…set是为了去除重复元素。

5.3 split

split() 方法用于把一个字符串分割成字符串数组,括号里的即为分割标识。

5.4 Object.keys

Object.keys 返回一个所有元素为字符串的数组,其元素来自于从给定的object上面可直接枚举的属性。这些属性的顺序与手动遍历该对象属性时的一致,将输入的queryParams中的键名进行遍历,对其格式进行修整方便传入后端进行处理。

var obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.keys(obj)); // console: ['0', '1', '2']

5.5 Object.values()

Object.values()返回一个数组,其元素是在对象上找到的可枚举属性值。属性的顺序与通过手动循环对象的属性值所给出的顺序相同。


var obj = { 0: 'a', 1: 'b', 2: 'c' };
console.log(Object.values(obj)); // ['a', 'b', 'c']
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

让子弹飞一会儿=>

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值