1.vueuse-useLocalStorage在项目中的使用

文章讨论了在多人协作项目中,使用TypeScript对localStore进行类型约束的重要性,并展示了如何通过函数重载和泛型简化getCache和setCache方法的定义,提高代码的可维护性和实用性。作者提供了一个示例,展示了如何利用vueuse/core的useLocalStorage,并在最近的更新中引入泛型来简化key的管理和类型提取。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

有了ts之后,传统的localStore在项目中(特别是多人协作项目时)使用起来就没那么顺手了,例如localStore的key及其参数类型的统一等等,当然同样可以使用ts来进行约束,不过对保存值的处理就会显得繁琐些。基于此就有了此篇文章的内容。

import { useLocalStorage } from '@vueuse/core';
import { ILocalCache, Keys, TGetCache, TUserInfo } from './type';

const defCache: ILocalCache = {
  token: '',
  userInfo: { username: '', avatar: '' },
};

export function useLocalCache() {
  // 1.获取cache
  function getCache(key: 'token'): string;
  function getCache(key: 'userInfo'): TUserInfo;
  function getCache(key: Keys): TGetCache {
    return useLocalStorage(key, defCache[key]).value;
  }
  // 2.设置cache
  function setCache(key: 'token', value: string): void;
  function setCache(key: 'userInfo', value: TUserInfo): void;
  function setCache(key: Keys, value: any) {
    useLocalStorage(key, defCache[key]).value = value;
  }
  // 3.移除cache
  function removeCache(key: Keys) {
    useLocalStorage(key, defCache[key]).value = null;
  }
  // 4.清除所有cache
  function clearCache() {
    localStorage.clear();
  }
  return { getCache, setCache, removeCache, clearCache };
}

上述代码中getCache及setCache方法用到ts的函数重载,不清楚的小伙伴可以去了解下,都是比较基础的ts用法。变量的类型封装在type.ts文件里面了,内容如下:

// { a:V; b:P } ---> a | b
type ObjToUnion<T> = {
  [P in keyof T]: P;
}[keyof T];

export interface ILocalCache {
  token: string;
  userInfo: { username: string; avatar: string }; // 用户信息
}
export type Keys = ObjToUnion<ILocalCache>;

export type TUserInfo = Pick<ILocalCache, 'userInfo'>['userInfo'];

export type TGetCache = string| TUserInfo;

最后。对useLocalStorage在项目中的使用仅个人见解,有更好使用方式的欢迎评论探讨~

2023-7-28 更新

getCache及setCache参数及返回值类型的定义使用函数重载还是过于麻烦了,特别是每次在新增key的时候都需要再定义一次;最近在思考能否更简单易用一些,有个一劳永逸的方法,只需要定义key的类型就行,突然想到这不就是泛型的作用吗… 由此便有了这次更新。

// useLocalCache.ts
import { useLocalStorage } from '@vueuse/core';

const defCache= {
  token: '',
  userInfo: { username: '', avatar: '' },
  theme: 'default' as 'default' | 'custom'
};

type LocalCacheValueType = typeof defCache;
type Keys = keyof LocalCacheValueType;

export function useLocalCache() {
  // 1.获取cache
  function getCache<T extends Keys>(key: T): LocalCacheValueType [T] {
    return useLocalStorage(key, defCache[key]).value;
  }
  // 2.设置cache
  function setCache<T extends Keys>(key: T, value: LocalCacheValueType [T]) {
    useLocalStorage(key, defCache[key]).value = value;
  }
  // 3.移除cache
  function removeCache(key: Keys) {
    useLocalStorage(key, defCache[key]).value = null;
  }
  // 4.清除所有cache
  function clearCache() {
    localStorage.clear();
  }
  return { getCache, setCache, removeCache, clearCache };
}

如上所示 在 getCache方法定义泛型 T 并且 通过 T extends Keys 来约束传入的key,返回值通过LocalCacheValueType [T]来取出对应的类型。这样当新增key时,只需要在 defCache 中定义好具体的类型,而无需重复的去写重载函数,实用性及可维护行都得到了不小的提高~~

项目在线地址github

vueuse相关系列文章

1.vueuse-useLocalStorage在项目中的使用

2.vueuse-useCssVar实现主题色切换功能

3.vueuse-createFetch实现接口请求及其封装(代替axios)

4.vueuse-useFullscreen优雅的使用全屏及退出全屏

5.vueuse-useDark实现暗黑主题及浅亮主题及Element-Plus暗黑模式

在机器人技术中,运动控制是实现机器人精确、高效运动的关键环节,而轨迹规划则是运动控制的核心部分。其目的是设计出一条平滑、连续且符合机器人动力学约束的路径,使机器人能够从起点平稳地移动到目标点。其中,多项式插值是一种常用的轨迹规划方法,可根据给定的起点和终点条件,生成满足要求的曲线轨迹。三次、五次和七次多项式是轨迹规划中常见的类型,其阶数决定了轨迹的灵活性和复杂性。 三次多项式(Cubic Polynomial)是最简单的连续可微多项式,形式为 f(t)=at 3 +bt 2 +ct+d。它常用于简单任务,能够确保通过起点、终点以及两个中间点的切线方向,共四个控制点。三次多项式轨迹规划简单且计算成本低,但可能无法满足复杂运动需求。 五次多项式(Quintic Polynomial)增加了自由度,形式为 f(t)=at 5 +bt 4 +ct 3 +dt 2 +et+f。它可以确保通过起点、终点、两个中间点及其切线方向,共六个控制点。这使得五次多项式在保持平滑的同时,能更好地适应路径曲率变化,适用于复杂轨迹规划。 七次多项式(Seventh Polynomial)提供了更高的灵活性,可以处理复杂路径规划问题。它有七个控制点,可精确控制起点、终点及五个中间点的切线方向。七次多项式通常用于高精度任务,如精密装配或医疗手术机器人,能够精细控制速度和加速度变化。 文件名 seventh.m、cubic.m 和 quintic.m 可能是用 MATLAB 编写的函数,分别用于实现七次、三次和五次多项式的轨迹规划算法。这些函数通常接受起点、终点坐标和时间参数,计算多项式系数,并输出随时间变化的位置、速度和加速度数据。 在实际应用中,选择多项式次数需综合考虑以下因素:路径平滑性,更高阶多项式可减少加速度突变,降低机械应力;计算复杂性,阶数越高计算量越大,可能影响实时性能;控制精度,更高阶多项
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值