当前位置: 首页 > wzjs >正文

深圳市网站制作公司网络广告网站

深圳市网站制作公司,网络广告网站,镇江企业网站建设,网站开发与管理论文问题 写了一个输入查询参数和url返回加载中状态、请求方法、接口返回列表的hooks,出现的结果是只有请求方法有效,加载状态无效,接口返回了数据,页面却不显示数据。 代码如下 只展示部分关键代码 import { ref, toRefs, toRef, o…

问题

写了一个输入查询参数和url返回加载中状态、请求方法、接口返回列表的hooks,出现的结果是只有请求方法有效,加载状态无效,接口返回了数据,页面却不显示数据。

代码如下

只展示部分关键代码

import { ref, toRefs, toRef, onMounted, onActivated, reactive } from 'vue';
import baseService from '@/service/baseService';
export default (props) => {const defaultOptions = {getListURL: '',dataForm: {},loading: false,dataList: []};const state = ref({ ...defaultOptions, ...props });const fetchList = () => {if (!state.value.getListURL) {return;}state.value.loading = true;baseService.get(state.value.getListURL, { ...state.value.dataForm }).then((res) => {if (res.code === 0) {state.value.dataList = [...res.data ];}}).finally(() => {state.value.loading = false;});};onMounted(() => {fetchList();});return {fetchList,dataList: state.value.dataList,loading: state.value.loading,};
};

页面使用

<el-row :gutter="20" v-loading="loading"><el-col :span="12" v-for="item in dataList" :key="item.id"><div class="item">{{ item.name }}</div></el-col>
</el-row>const params = ref({name: '', // 搜索框名称
});
const { loading, fetchList, dataList } = useDataList({dataForm: params.value,getListURL: '/page/list',
});

分析

好久没用vue3,写出来的代码让自己一时找不出来问题,唉。。。

第一次尝试

在使用文件下面打印列表查看一下

const { loading, fetchList, dataList } = useDataList({dataForm: params.value,getListURL: '/page/list',
});
console.log(dataList);

是Proxy包裹的空数组,这应该是响应的数据,不像解构赋值出现的响应丢失啊。

为防止真的是这个问题,在hooks导出时使用toRefs包裹一下看看

import { ref, toRefs, toRef, onMounted, onActivated, reactive } from 'vue';
import baseService from '@/service/baseService';
export default (props) => {const defaultOptions = {getListURL: '',dataForm: {},loading: false,dataList: []};const state = ref({ ...defaultOptions, ...props });const fetchList = () => {if (!state.value.getListURL) {return;}state.value.loading = true;baseService.get(state.value.getListURL, { ...state.value.dataForm }).then((res) => {if (res.code === 0) {state.value.dataList = [...res.data ];}}).finally(() => {state.value.loading = false;});};onMounted(() => {fetchList();});return {fetchList,...toRefs({dataList: state.value.dataList,loading: state.value.loading,})};
};

这下真好,打印的是ObjectRefImpl,然而查看里面看到还是空数组。

第二次尝试

接口响应里面有问题吗?那就在接口成功里面打印一下试试看

import { ref, toRefs, toRef, onMounted, onActivated, reactive } from 'vue';
import baseService from '@/service/baseService';
export default (props) => {const defaultOptions = {getListURL: '',dataForm: {},loading: false,dataList: []};const state = ref({ ...defaultOptions, ...props });const fetchList = () => {if (!state.value.getListURL) {return;}state.value.loading = true;baseService.get(state.value.getListURL, { ...state.value.dataForm }).then((res) => {if (res.code === 0) {state.value.dataList = [...res.data ];console.log(state.value.dataList);}}).finally(() => {state.value.loading = false;});};onMounted(() => {fetchList();});return {fetchList,dataList: state.value.dataList,loading: state.value.loading,};
};

发现这里打印是有数据的,那在hooks方法里面返回前打印看看

import { ref, toRefs, toRef, onMounted, onActivated, reactive } from 'vue';
import baseService from '@/service/baseService';
export default (props) => {const defaultOptions = {getListURL: '',dataForm: {},loading: false,dataList: []};const state = ref({ ...defaultOptions, ...props });const fetchList = () => {if (!state.value.getListURL) {return;}state.value.loading = true;baseService.get(state.value.getListURL, { ...state.value.dataForm }).then((res) => {if (res.code === 0) {state.value.dataList = [...res.data ];}}).finally(() => {state.value.loading = false;});};onMounted(() => {fetchList();});console.log(state.value.dataList);return {fetchList,dataList: state.value.dataList,loading: state.value.loading,};
};

啊?这里也是空对象,看来问题还是出现在hooks里面啊。直接打印state看看吧(应该上一次打印,这两个都打印试试的)

import { ref, toRefs, toRef, onMounted, onActivated, reactive } from 'vue';
import baseService from '@/service/baseService';
export default (props) => {const defaultOptions = {getListURL: '',dataForm: {},loading: false,dataList: []};const state = ref({ ...defaultOptions, ...props });const fetchList = () => {if (!state.value.getListURL) {return;}state.value.loading = true;baseService.get(state.value.getListURL, { ...state.value.dataForm }).then((res) => {if (res.code === 0) {state.value.dataList = [...res.data ];}}).finally(() => {state.value.loading = false;});};onMounted(() => {fetchList();});console.log(state.value.dataList);console.log(state);return {fetchList,dataList: state.value.dataList,loading: state.value.loading,};
};

此时可以看到state里面是有接口返回的数据的,这样应该就说明不能使用.value获取之后返回使用,这时候的数据是接口响应前的。

那就改造一下直接返回refreactive的数据结构赋值之后是响应丢失的)

import { ref, toRefs, toRef, onMounted, onActivated, reactive } from 'vue';
import baseService from '@/service/baseService';
export default (props) => {const defaultOptions = {getListURL: '',dataForm: {},};const state = ref({ ...defaultOptions, ...props });const loading = ref(false);const dataList = ref({});const fetchList = () => {if (!state.value.getListURL) {return;}loading.value = true;baseService.get(state.value.getListURL, { ...state.value.dataForm }).then((res) => {if (res.code === 0) {dataList.value = [...res.data ];}}).finally(() => {loading.value = false;});};onMounted(() => {fetchList();});return {fetchList,dataList,loading,};
};
<el-row :gutter="20" v-loading="loading.value"><el-col :span="12" v-for="item in dataList.value" :key="item.id"><div class="item">{{ item.name }}</div></el-col>
</el-row>const params = ref({name: '', // 搜索框名称
});
const { loading, fetchList, dataList } = useDataList({dataForm: params.value,getListURL: '/page/list',
});

但是这是为什么,还是有问题啊?崩溃啊!

第三次尝试

在使用里面打印一下

<el-row :gutter="20" v-loading="loading.value"><el-col :span="12" v-for="item in dataList.value" :key="item.id"><div class="item">{{ item.name }}</div></el-col>
</el-row>const params = ref({name: '', // 搜索框名称
});
const { loading, fetchList, dataList } = useDataList({dataForm: params.value,getListURL: '/page/list',
});
console.log(dataList)

发现数据已经更新到接口返回的了,怎么页面没反应呢?额。。。好像页面模版里面可以省略.value,修改一下看看

<el-row :gutter="20" v-loading="loading"><el-col :span="12" v-for="item in dataList" :key="item.id"><div class="item">{{ item.name }}</div></el-col>
</el-row>const params = ref({name: '', // 搜索框名称
});
const { loading, fetchList, dataList } = useDataList({dataForm: params.value,getListURL: '/page/list',
});
console.log(dataList)

撒花,终于解决完问题了(刚才不手欠加个.value,就不用耽误一次修改了)

结尾

  1. 自定义hooks,要想返回响应式ref数据,不要使用.value转一层,直接返回ref数据。
  2. 模板里面使用ref数据时候,不要加.value

彩蛋

使用css实现多行超出显示…无效

超出一行没换行

有的换行,但是超出没显示…

overflow:hidden; 
text-overflow:ellipsis;
display:-webkit-box; 
-webkit-box-orient:vertical;
-webkit-line-clamp:2; 

这可能是英文文字太长导致的,这需要加上强制换行的css就可以

word-break: break-all;

在这里插入图片描述

http://www.dtcms.com/wzjs/467967.html

相关文章:

  • 建设工程网站168北京百度推广seo
  • 做外国网站自媒体爱战网关键词
  • 专门做湘菜的网站贵阳网络推广外包
  • 网站一年多少费用抖音视频seo霸屏
  • 网页翻页电子书制作模板电脑优化是什么意思
  • 做网站建站点网页制作流程
  • 江油市规划和建设局网站点石关键词排名优化软件
  • 龙岗网站建设公司官网太原做网站哪家好
  • 菜市场做建筑设计图库的网站设计百度网址大全手机版
  • 栏目手机版 企业网站百度分公司
  • 直销模式最好的公司最新seo自动优化软件
  • 郑州优化网站公司微商引流的最快方法是什么
  • 小白如何做网站广东seo排名
  • b站推广网站400seo推广公司哪家好
  • 泰安网站建设优化技术汕头网站排名
  • 一级av做爰片不卡免费网站百度网站流量统计
  • 为外国企业做中文网站建设seo学途论坛网
  • 网页制作工具下载惠州seo计费管理
  • 建设部机关服务中心网站seo站长工具查询系统
  • 网站制作公司合肥广州网站优化费用
  • 外贸seo网站搭建贵州seo技术查询
  • 苏州网站优化企业百度推广代理公司
  • 推荐 南昌网站建设企业官网网站
  • 上海集团网站建设咨询慧聪网
  • Javascript做网站东莞网站推广技巧
  • 手机网站在线制作网络安全培训
  • 门户网站建设与推广方案百度竞价点击神器奔奔
  • 做网站 域名 最快要多久深圳信息公司做关键词
  • 免费提供ppt模板的网站网络优化工程师前景如何
  • 上海企业都用什么网站宁波seo外包