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

江西网站建设哪家好cba最新积分榜

江西网站建设哪家好,cba最新积分榜,学校网站怎么做的好,广西营销型网站建设问题 写了一个输入查询参数和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/291041.html

相关文章:

  • 云南省植保植检站网址网站推广排名教程
  • 广东网页空间价格优化seo可以从以下几个方面进行
  • 手机开发者模式打开有什么影响资源网站优化排名软件
  • wap网站欣赏seo 技术优化
  • 如何建微信公众号湖南关键词优化排名推广
  • 网站建设托管今日重点新闻
  • wix做网站seo店铺描述例子
  • 做外贸主要在那些网站找单seo实战培训课程
  • 招聘网站内容建设网站排名在线优化工具
  • php如何做视频网站会计培训班初级费用
  • 贵阳手机网站建设网络营销网站设计
  • 短网址生成怎么使用广州网页seo排名
  • 河南建设部网站河南做网站的
  • 网站开发工程师考试上海搜索引擎优化公司
  • 酒店网站html模板今日新闻10条简短
  • 茶叶电子商务网站建设的结论湖南正规关键词优化
  • 谁做违法网站谷歌搜索官网
  • 网站制作源码版权搜索引擎哪个最好用
  • 哪个网站开发好如何做电商 个人
  • 深圳 网站建设网络营销优化推广公司
  • 公司网站优化要怎么做公司官网制作开发
  • 做网站公司未来的发展方向企业网站seo优化
  • 介绍一下比较靠谱的网站零基础能做网络推广吗
  • 供应商入驻b2b网站建设个人网站免费制作平台
  • 首码网站免费推广经典软文广告案例
  • 网站备案需要的资料seo快速排名百度首页
  • 做素材网站服务器网站查询ip地址查询
  • 网站建设方案书备案优化科技
  • 如何提高网站点击率电子商务营销模式有哪些
  • 网站颜色搭配湘潭seo培训