封装好的下拉选择组件初始异步数据应该如何处理?

问题描述

在日常开发过程中,我们经常会封装好一些可检索的下拉选择组件,一般都会按照一些条件默认查询出来可选值,但是如果页面上有很多同样的组件时(有些时候一个页面中循环出来10多个相同的组件),这时候就会同时发起多个一样的请求。

问题出现的环境背景及自己尝试过哪些方法

想考虑从请求拦截器内处理但是没有一个比较好的解决思路。

相关代码

下拉选择组件示例代码:

<template>

<el-select

v-model="selected"

v-bind="$attrs"

style="width:100%"

placeholder="请选择"

:loading="loading"

:multiple="multiple"

filterable

clearable

@change="handleChange"

>

<el-option

v-for="item in optionList"

:key="item.id"

:label="item.label"

:value="item.value"

/>

</el-select>

</template>

<script>

import { dictList } from '@/api/dict'

export default {

name: 'DictSelect',

model: {

prop: 'value',

event: 'change'

},

props: {

value: {

type: [String, Array],

default: ''

},

// 是否多选

multiple: {

type: Boolean,

default: false

},

// 种类限制

category: {

type: String,

default: ''

}

},

data() {

return {

selected: '',

optionList: [],

loading: false

}

},

watch: {

category(val, oldVal) {

if (val !== oldVal) {

this.loadData().then(() => {

this.selected = ''

this.handleChange('')

})

}

},

value(value) {

let newValue = value

if (this.multiple && !Array.isArray(newValue)) newValue = newValue.split(',').filter(Boolean)

this.selected = newValue

}

},

mounted() {

this.loadData().then(() => {

this.selected = this.value

})

},

methods: {

// 获取列表数据

loadData() {

return new Promise((resolve, reject) => {

this.loading = true

const data = {

category: this.category

}

dictList(data).then(res => {

this.optionList = res.data.rows

this.loading = false

resolve()

}).catch(() => reject())

})

},

// 选中值变更

handleChange(val) {

this.$emit('change', val)

}

}

}

</script>

你期待的结果是什么?实际看到的错误信息又是什么?

应该如何去优化这个初始数据的请求,比如说合并重复请求之类的。

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。


回答:

我的做法很简单,用缓存,现在基本通过Service Workers来针对这些重复访问的API,全部缓存优先,

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。


回答:

其实也就可以理解为复用相同数据:

  • 全局状态仍然适用,在对应的请求逻辑中先判断全局状态是否有值,决定是否需要发起请求
  • 请求拦截的话,其实就是初始化请求到的数据直接保存起来,下一次相同的请求直接从缓存中获取,基于 axios 的请求拦截的话也是判断缓存中有值就取消掉本次请求即可
本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。


回答:

想优化肯定是缓存,缓存策略肯定是使用方可以自由选择,默认是走缓存的,如果不走缓存就需要手动传一个 cache: false

然后就是看你使用的工具了,比如说楼上大佬们说的那些。还可以使用 vuex 之类的统一数据中心,加载数据是触发同一个加载,这样方便管控限流

本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。


回答:

写了段测试代码供参考。

封装好的下拉选择组件初始异步数据应该如何处理?
封装好的下拉选择组件初始异步数据应该如何处理?

以上是 封装好的下拉选择组件初始异步数据应该如何处理? 的全部内容, 来源链接: utcz.com/p/933906.html

回到顶部