<?xml version="1.0" encoding="utf-8" ?><rss version="2.0"><channel><title><![CDATA[liushihao_的博客]]></title><description><![CDATA[]]></description><link>https://blog.youkuaiyun.com/liushihao_</link><language>zh-cn</language><generator>https://blog.youkuaiyun.com/</generator><copyright><![CDATA[Copyright &copy; liushihao_]]></copyright><item><title><![CDATA[uniapp开发APP通用方法]]></title><link>https://blog.youkuaiyun.com/liushihao_/article/details/140766713</link><guid>https://blog.youkuaiyun.com/liushihao_/article/details/140766713</guid><author>liushihao_</author><pubDate>Mon, 29 Jul 2024 14:17:54 +0800</pubDate><description><![CDATA[2. 监听内部原生img标签的长按事件，开启从下到上的1/3屏的展开菜单，这个组件可以用组件库的，我们用的UView2.0，默认第一个菜单选项为【保存图片】，其余菜单项由父组件传入配置option，option为JSON结构，每个对象包含了title菜单名和click点击事件，将title和click绑定在菜单项上，用于拓展组件功能。1. 新建Image组件，监听点击事件，新建一个view或div图层设置100vh和100vw，层级设置999最高，内部节点为原生img标签，用来全屏展示图片。]]></description><category></category></item><item><title><![CDATA[axios进阶——取消已经发出去的请求]]></title><link>https://blog.youkuaiyun.com/liushihao_/article/details/139656383</link><guid>https://blog.youkuaiyun.com/liushihao_/article/details/139656383</guid><author>liushihao_</author><pubDate>Thu, 13 Jun 2024 16:49:32 +0800</pubDate><description><![CDATA[当用户快速连续触发同一操作（比如多次点击按钮发送同一个请求），这个函数可以确保只有最后一个请求被执行，之前的相同请求会被取消，从而避免了因重复请求导致的数据不一致或服务器压力。：及时取消不再需要的HTTP请求可以释放浏览器或应用的资源，尤其是在移动端或网络环境不稳定的情况下，有助于节省数据流量和电池使用。)，可以有效管理网络请求队列，特别是在用户交互频繁的应用中，有助于提升应用响应速度和用户体验。3.存入前进行检查，如果存在该映射关系，将旧的请求cancel()取消掉，将新的映射存入。]]></description><category></category></item><item><title><![CDATA[Web本地缓存的正确使用]]></title><link>https://blog.youkuaiyun.com/liushihao_/article/details/139238964</link><guid>https://blog.youkuaiyun.com/liushihao_/article/details/139238964</guid><author>liushihao_</author><pubDate>Thu, 13 Jun 2024 15:45:21 +0800</pubDate><description><![CDATA[【代码】Web本地缓存的正确使用。]]></description><category></category></item><item><title><![CDATA[uniapp开发WebRTC语音直播间支持app（android+IOS）和H5，并记录了所有踩得坑]]></title><link>https://blog.youkuaiyun.com/liushihao_/article/details/135549559</link><guid>https://blog.youkuaiyun.com/liushihao_/article/details/135549559</guid><author>liushihao_</author><pubDate>Fri, 12 Jan 2024 14:45:48 +0800</pubDate><description><![CDATA[1. 创建自己的语音直播间2. 查询所有直播间列表3.加入房间4.申请上位5.麦克风控制6.声音控制7.赠送礼物（特效 + 批量移动动画）8.退出房间。]]></description><category></category></item><item><title><![CDATA[Uniapp APP手机本地缓存图片、svga、视频等文件]]></title><link>https://blog.youkuaiyun.com/liushihao_/article/details/131519461</link><guid>https://blog.youkuaiyun.com/liushihao_/article/details/131519461</guid><author>liushihao_</author><pubDate>Mon, 03 Jul 2023 17:04:08 +0800</pubDate><description><![CDATA[Uniapp APP手机本地缓存图片、svga、视频等文件]]></description><category></category></item><item><title><![CDATA[微信小程序自研图片上传组件]]></title><link>https://blog.youkuaiyun.com/liushihao_/article/details/131211494</link><guid>https://blog.youkuaiyun.com/liushihao_/article/details/131211494</guid><author>liushihao_</author><pubDate>Wed, 14 Jun 2023 17:25:21 +0800</pubDate><description><![CDATA[微信小程序自研图片上传组件，支持图片上传 + 回显，上传成功后自动弹出下一个上传区域
，组件化拿来即用，组件会将上传结果返回给父组件]]></description><category></category></item><item><title><![CDATA[Vue3组件化学习总结二]]></title><link>https://blog.youkuaiyun.com/liushihao_/article/details/119743965</link><guid>https://blog.youkuaiyun.com/liushihao_/article/details/119743965</guid><author>liushihao_</author><pubDate>Mon, 16 Aug 2021 22:57:12 +0800</pubDate><description><![CDATA[人处理问题的方式

人面对复杂问题的处理方式：

任何一个人处理信息的逻辑能力都是有限的

所以，当面对一个非常复杂的问题时，我们不太可能一次性搞定一大堆的内容。

但是，我们人有一种天生的能力，就是将问题进行拆解。

如果将一个复杂的问题，拆分成很多个可以处理的小问题，再将其放在整体当中，你会发现大的问题也会迎刃而解。



认识组件化开发

组件化也是类似的思想：

如果我们将一个页面中所有的处理逻辑 全部放在一起，处理起来就会变得非常 复杂，而且不利于后续的管理以及扩展；

但如果，我们讲一个页面拆分]]></description><category></category></item><item><title><![CDATA[Vue3中Options-API 学习总结一]]></title><link>https://blog.youkuaiyun.com/liushihao_/article/details/119742862</link><guid>https://blog.youkuaiyun.com/liushihao_/article/details/119742862</guid><author>liushihao_</author><pubDate>Mon, 16 Aug 2021 22:33:25 +0800</pubDate><description><![CDATA[复杂data的处理方式

我们知道，在模板中可以直接通过插值语法显示一些data中的数据。

但是在某些情况，我们可能需要对数据进行一些转化后再显示，或者需要将多个数据结合起来进行显示；

比如我们需要对多个data数据进行运算、三元运算符来决定结果、数据进行某种转化后显示；

在模板中使用表达式，可以非常方便的实现，但是设计它们的初衷是用于简单的运算；

在模板中放入太多的逻辑会让模板过重和难以维护；

并且如果多个地方都使用到，那么会有大量重复的代码；

我们有没有什么方法可以将逻辑抽离出去呢？

可以]]></description><category></category></item><item><title><![CDATA[TypeScript语法探究六]]></title><link>https://blog.youkuaiyun.com/liushihao_/article/details/119722026</link><guid>https://blog.youkuaiyun.com/liushihao_/article/details/119722026</guid><author>liushihao_</author><pubDate>Sun, 15 Aug 2021 23:29:36 +0800</pubDate><description><![CDATA[TypeScript枚举类型

枚举类型是为数不多的TypeScript特性有的特性之一：

枚举其实就是将一组可能出现的值，一个个列举出来，定义在一个类型中，这个类型就是枚举类型；



枚举允许开发者定义一组命名常量，常量可以是数字、字符串类型；

枚举类型的值

枚举类型默认是有值的，比如上面的枚举，默认值是这样的：



当然，我们也可以给枚举其他值：



这个时候会从100进行递增；

我们也可以给他们赋值其他的类型：



认识泛型

软件工程的主要目的是构建不仅仅明确和一致的API...]]></description><category></category></item><item><title><![CDATA[用TS封装了一个axios，支持全局拦截、实例拦截、单个请求拦截、loading等待功能]]></title><link>https://blog.youkuaiyun.com/liushihao_/article/details/119709652</link><guid>https://blog.youkuaiyun.com/liushihao_/article/details/119709652</guid><author>liushihao_</author><pubDate>Sun, 15 Aug 2021 09:26:40 +0800</pubDate><description><![CDATA[先给拍一张结构图



最外层 index.ts统一出口

request文件夹中的 config.ts进行了baseurl和响应时间等基础配置

request文件夹中的index.ts就是我们主要的axios封装问加啦

最外层 index.ts


// service统一出口
import HYRequest from './request'
import {BASE_URL,TIME_OUT} from './request/config'

const hyRequest = new HYR..]]></description><category></category></item><item><title><![CDATA[TypeScript语法探究五]]></title><link>https://blog.youkuaiyun.com/liushihao_/article/details/119708074</link><guid>https://blog.youkuaiyun.com/liushihao_/article/details/119708074</guid><author>liushihao_</author><pubDate>Sun, 15 Aug 2021 00:00:40 +0800</pubDate><description><![CDATA[接口的声明

在前面我们通过type可以用来声明一个对象类型：



对象的另外一种声明方式就是通过接口来声明：



 他们在使用上的区别，我们后续再来说明。

接下来我们继续学习一下接口的其他特性。

可选属性

接口中我们也可以定义可选属性：



只读属性

接口中也可以定义只读属性：



这样就意味着我们再初始化之后，这个值是不可以被修改的；



索引类型

前面我们使用interface来定义对象类型，这个时候其中的属性名、类型、方法都是确定的，但是有时候我们会遇 到类似下面的对象：
...]]></description><category></category></item><item><title><![CDATA[TypeScript语法探究四]]></title><link>https://blog.youkuaiyun.com/liushihao_/article/details/119685774</link><guid>https://blog.youkuaiyun.com/liushihao_/article/details/119685774</guid><author>liushihao_</author><pubDate>Fri, 13 Aug 2021 23:59:25 +0800</pubDate><description><![CDATA[类型缩小

什么是类型缩小呢？

类型缩小的英文是 Type Narrowing；

我们可以通过类似于 typeof padding === "number" 的判断语句，来改变TypeScript的执行路径；

在给定的执行路径中，我们可以缩小比声明时更小的类型，这个过程称之为 缩小;

而我们编写的 typeof padding === "number 可以称之为 类型保护（type guards）；

常见的类型保护有如下几种：

ptypeof    平等缩小（比如===、!==） ...]]></description><category></category></item><item><title><![CDATA[TypeScript语法探究三]]></title><link>https://blog.youkuaiyun.com/liushihao_/article/details/119685453</link><guid>https://blog.youkuaiyun.com/liushihao_/article/details/119685453</guid><author>liushihao_</author><pubDate>Fri, 13 Aug 2021 23:28:52 +0800</pubDate><description><![CDATA[函数的参数类型

函数是JavaScript非常重要的组成部分，TypeScript允许我们指定函数的参数和返回值的类型。

参数的类型注解

声明函数时，可以在每个参数后添加类型注解，以声明函数接受的参数类型：



函数的返回值类型

我们也可以添加返回值的类型注解，这个注解出现在函数列表的后面：



和变量的类型注解一样，我们通常情况下不需要返回类型注解，因为TypeScript会根据 return 返回值推断函数的返回类型：

某些第三方库处于方便理解，会明确指定返回类型，但是这个看个人喜好；

]]></description><category></category></item><item><title><![CDATA[TypeScript语法探究二]]></title><link>https://blog.youkuaiyun.com/liushihao_/article/details/119655810</link><guid>https://blog.youkuaiyun.com/liushihao_/article/details/119655810</guid><author>liushihao_</author><pubDate>Thu, 12 Aug 2021 23:33:13 +0800</pubDate><description><![CDATA[认识TypeScript

虽然已经知道TypeScript是干什么的了，也知道它解决了什么样的问题，但是我们还是需要全面的来认识一下TypeScript到底是什么？

我们来看一下TypeScript在GitHub和官方上对自己的定义：

GitHub说法：TypeScript is a superset of JavaScript that compiles to clean JavaScript output. TypeScript官网：TypeScript is a typed superset o]]></description><category></category></item><item><title><![CDATA[TypeScript 语法探究一]]></title><link>https://blog.youkuaiyun.com/liushihao_/article/details/119655488</link><guid>https://blog.youkuaiyun.com/liushihao_/article/details/119655488</guid><author>liushihao_</author><pubDate>Thu, 12 Aug 2021 22:49:30 +0800</pubDate><description><![CDATA[我始终相信：任何新技术的出现都是为了解决原有技术的某个痛点

JavaScript是一门优秀的编程语言吗？

每个人可能观点并不完全一致，但是从很多角度来看，JavaScript是一门非常优秀的编程语言；而且，可以说在很长一段时间内这个语言不会被代替，并且会在更多的领域被大家广泛使用；

著名的Atwood定律：Stack Overflow的创立者之一的 Jeff Atwood 在2007年提出了著名的 Atwood定律。 any application that can be written in Ja.]]></description><category></category></item><item><title><![CDATA[Vue中组件之间8种通信方式]]></title><link>https://blog.youkuaiyun.com/liushihao_/article/details/119617378</link><guid>https://blog.youkuaiyun.com/liushihao_/article/details/119617378</guid><author>liushihao_</author><pubDate>Wed, 11 Aug 2021 21:28:14 +0800</pubDate><description><![CDATA[最近在学习Vue3（可能有点晚），在学习之前复习了一边Vue2中的知识，现做一个简单的组件间通信（数据穿透）总结

一、props/$emit

父组件通过props的方式向子组件传递数据，而通过$emit子组件可以向父组件通信。

1. 父组件向子组件传值

下面通过一个例子说明父组件如何向子组件传递数据：在子组件article.vue中如何获取父组件section.vue中的数据articles:['红楼梦', '西游记','三国演义']


// section父组件
&lt;template&...]]></description><category></category></item><item><title><![CDATA[JavaScript精度丢失问题]]></title><link>https://blog.youkuaiyun.com/liushihao_/article/details/119374056</link><guid>https://blog.youkuaiyun.com/liushihao_/article/details/119374056</guid><author>liushihao_</author><pubDate>Wed, 04 Aug 2021 08:50:23 +0800</pubDate><description><![CDATA[javaScript中臭名昭著的BUG就是0.1+0.2 !== 0.3，因为精度问题，导致所有浮点数运算都是不安全的。
	
	
	正如下面的计算结果，它们并不是我们所预想的：
	

0.1 + 0.2 = 0.30000000000000004



1 - 0.9 = 0.09999999999999998



	虽然很多人知道这个浮点数误差这个问题的，可是却不知道背后的原理以及解决方案。今天我们就通过上面两个例子看看JavaScript浮点数误差问题背后的原理以及解决方案吧！
	
	
	那我们先..]]></description><category></category></item><item><title><![CDATA[uni-app 关于uploadFiles API的小坑 （cloudPath不可为空）]]></title><link>https://blog.youkuaiyun.com/liushihao_/article/details/119322775</link><guid>https://blog.youkuaiyun.com/liushihao_/article/details/119322775</guid><author>liushihao_</author><pubDate>Mon, 02 Aug 2021 12:50:22 +0800</pubDate><description><![CDATA[最近在写uni-app的新闻资讯项目，涉及到其中的最普普通通的图片上传功能。

参考官方文档



我客客气气的把uni.chooseImage 传回来的图片路径和图片名称分别传给了 filePath 和 cloudPath


uni.chooseImage({
					count:count,
					success:(res) =&gt; {
						// console.log(res);
						const tempfilepaths = res.tempFilePaths
			..]]></description><category></category></item><item><title><![CDATA[6 个没人讲过的 CSS 属性]]></title><link>https://blog.youkuaiyun.com/liushihao_/article/details/119274199</link><guid>https://blog.youkuaiyun.com/liushihao_/article/details/119274199</guid><author>liushihao_</author><pubDate>Sat, 31 Jul 2021 12:56:55 +0800</pubDate><description><![CDATA[1.all

你是否曾经使用过 CSS 框架呢？如果是的话，我可以肯定你有好几次都想要根据自己的喜好覆盖某些元素的样式定义。

最常用的方法是使用 CSS 中的!important属性来强调当前属性，而忽略所有其他设置和规则。


.header{
color:blue!important;
font-size:14px!important;
}


但是，重复书写相同的关键字会让 CSS 文件看起来很混乱。

而一个更简单的覆盖样式定义的方法，是使用all属性。

al...]]></description><category></category></item><item><title><![CDATA[28个Vue知识点，必会!!!]]></title><link>https://blog.youkuaiyun.com/liushihao_/article/details/119273015</link><guid>https://blog.youkuaiyun.com/liushihao_/article/details/119273015</guid><author>liushihao_</author><pubDate>Sat, 31 Jul 2021 12:46:45 +0800</pubDate><description><![CDATA[1.Vue的优点? vue的缺点?

优点:渐进式，组件化，轻量级，虚拟dom，响应式，单页面路由，数据与视图分开缺点:单页面不利于seo，不支持IE8以下，首屏加载时间长

2.为什么说Vue是一个渐进式框架?

渐进式:通俗点讲就是，你想用啥你就用啥，咱也不强求你。你想用component就用，不用也行，你想用vuex就用，不用也可以

3. Vue跟React的异同点?

相同点:
1.都使用了虚拟dom
2.组件化开发
3.都是单向数据流(父子组件之间，不建议子修改父传下来的数据) 4.都支持服务端]]></description><category></category></item></channel></rss>