”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 不要重新发明轮子!或者 Vue 和 React 应用程序的实用程序库

不要重新发明轮子!或者 Vue 和 React 应用程序的实用程序库

发布于2024-08-28
浏览:769

Don’t reinvent the wheel! Or utility libraries for Vue and React applications

介绍

许多开发人员,当涉及到标准 Web 应用程序功能时,例如:存储和管理布尔值、处理按下的按键或创建步进器,通常会尝试找到如何执行这个或那个功能,并且更常见的是,他们找到一种方法从头开始实现功能。

无需重新发明轮子!

各种框架(React、vue 等)的可重用函数库的创建者和用户对这种方法有这样的反应。

对于 Vue——​​例如,vueuse。 (vue实用函数)

对于React来说,今天最好的一个是全新的、积极支持的reactuse(用于react hooks)

这些库解决了什么问题?

它们需要减少开发人员的生活挑战。提前准备好开发人员在工作中可能需要的所有功能。如果他使用现成的包,他至少可以节省时间,最多可以最大限度地减少在代码中发现错误或错误的可能性,因为每个功能都是单独测试的。用例实际上是巨大的。在此类库的帮助下,您可以,例如:

  1. 使用网络套接字
  2. 进行查询
  3. 检测用户的地理位置
  4. 使用本地存储
  5. 轻松创建模态窗口

这只是所有可能情况的一小部分。

为什么 VueUse 很酷?

VueUse 是 vue 中最受欢迎的此类库之一。毕竟,它提供了最基本的可重用功能。有些人认为它是构建 Vue 应用程序时的一个标准,没有它就不可能实现。很难不同意,该库由两百多个功能组成,并遵循上述意识形态。

React 的最佳替代方案

虽然称赞 vueuse 是完美实现一个伟大想法的最佳方式,但我们不应该忘记排名第一的 js 库/框架——React。而这里的情况更令人不快。毕竟,React 没有成熟的、可靠的、广泛的且唯一的库。不同的开发人员进行了一些尝试,但其中之一的钩子太少了(在 React 中它们是钩子,是的),某处有使用未处理的 api 构建的钩子。

为了改善这种情况,作为vueuse的替代品,但在react中,出现了reactuse。

让我们举个例子,尝试在库的帮助下并仅使用普通的 React 创建列表管理。

import { useList } from "@siberiacancode/reactuse";

function App() {
  const { value, set, push, removeAt, insertAt, updateAt, clear, reset } =
    useList(["Pink Floyd", "Led Zeppelin"]);
}
export default App;

我们获取value(数组值)、set(分配另一个数组值的函数)、push(向数组添加值的函数)、removeAt(按索引删除)、updateAt(按索引更改值)、clear(清除)数组),重置(重置为默认值)
现在,在普通反应上获取所有这些状态和函数的代码:

const [value, setValue] = useState(["Pink Floyd", "Led Zeppelin"]);
  const [initialValue] = useState(["Pink Floyd", "Led Zeppelin"]);
  const set = (newValue: string[]) => {
    setValue(newValue);
  };
  const push = (valueToPush: string) => {
    setValue((prevArray) => [...prevArray, valueToPush]);
  };
  const removeAt = (index: number) => {
    setValue((prevArray) => [
      ...prevArray.slice(0, index),
      ...prevArray.slice(index   1),
    ]);
  };
  const insertAt = (index: number, item: "string") =>
    setValue((l) => [...l.slice(0, index), item, ...l.slice(index)]);

  const updateAt = (index: number, newValue: string) => {
    setValue((prevList) =>
      prevList.map((element, index) => (index === index ? newValue : element))
    );
  };

  const clear = () => setValue([]);
  const reset = () => setValue(initialValue);

我们得到了完全相同的方法和状态。而且代码更小更简单

该库得到积极维护,添加了新的钩子,有一个带有文档的方便网站,钩子使用简单的源代码并具有更复杂的 API。现在已经实现了 80 多个钩子。我还想指出,有绝对新的实现,我在其他地方没有见过:

  • usePaint — 用于创建画布并在其上绘图。你设置画布,钩子允许你在上面画画,调整画笔的大小、颜色、不透明度以及状态“绘制”或“现在绘制”
  • useStopwatch — 用于创建秒表
  • useEyeDropper — 使用滴管进行颜色选择
  • 大量的钩子用于用户设备或浏览器 API(useMemory、useOperatingSystem、useClipboard、useBrowserLanguage、useHash 等)

结论

这样的库应该成为一种开发标准,只是因为它们让你不必专注于很久以前就已经发明的小细节,你只需要导入它们并使用它们。

反应使用链接

npm — github

版本声明 本文转载于:https://dev.to/tyoma_aac5bc47a51c726e0d8/dont-reinvent-the-wheel-or-utility-libraries-for-vue-and-react-applications-1ido?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 图片在Chrome中为何仍有边框?`border: none;`无效解决方案
    图片在Chrome中为何仍有边框?`border: none;`无效解决方案
    在chrome 在使用Chrome and IE9中的图像时遇到的一个频繁的问题是围绕图像的持续薄薄边框,尽管指定了图像,尽管指定了;和“边境:无;”在CSS中。要解决此问题,请考虑以下方法: Chrome具有忽略“ border:none; none;”的已知错误,风格。要解决此问题,请使用以下...
    编程 发布于2025-06-27
  • Python读取CSV文件UnicodeDecodeError终极解决方法
    Python读取CSV文件UnicodeDecodeError终极解决方法
    在试图使用已内置的CSV模块读取Python中时,CSV文件中的Unicode Decode Decode Decode Decode decode Error读取,您可能会遇到错误的错误:无法解码字节 在位置2-3中:截断\ uxxxxxxxx逃脱当CSV文件包含特殊字符或Unicode的路径逃...
    编程 发布于2025-06-27
  • Java的Map.Entry和SimpleEntry如何简化键值对管理?
    Java的Map.Entry和SimpleEntry如何简化键值对管理?
    A Comprehensive Collection for Value Pairs: Introducing Java's Map.Entry and SimpleEntryIn Java, when defining a collection where each element com...
    编程 发布于2025-06-27
  • 如何使用Python的请求和假用户代理绕过网站块?
    如何使用Python的请求和假用户代理绕过网站块?
    如何使用Python的请求模拟浏览器行为,以及伪造的用户代理提供了一个用户 - 代理标头一个有效方法是提供有效的用户式header,以提供有效的用户 - 设置,该标题可以通过browser和Acterner Systems the equestersystermery和操作系统。通过模仿像Chro...
    编程 发布于2025-06-27
  • 为什么不````''{margin:0; }`始终删除CSS中的最高边距?
    为什么不````''{margin:0; }`始终删除CSS中的最高边距?
    在CSS 问题:不正确的代码: 全球范围将所有余量重置为零,如提供的代码所建议的,可能会导致意外的副作用。解决特定的保证金问题是更建议的。 例如,在提供的示例中,将以下代码添加到CSS中,将解决余量问题: body H1 { 保证金顶:-40px; } 此方法更精确,避免了由全局保证金重置引...
    编程 发布于2025-06-27
  • 为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    为什么PHP的DateTime :: Modify('+1个月')会产生意外的结果?
    使用php dateTime修改月份:发现预期的行为在使用PHP的DateTime类时,添加或减去几个月可能并不总是会产生预期的结果。正如文档所警告的那样,“当心”这些操作的“不像看起来那样直观。 ; $ date->修改('1个月'); //前进1个月 echo $ date->...
    编程 发布于2025-06-27
  • 如何克服PHP的功能重新定义限制?
    如何克服PHP的功能重新定义限制?
    克服PHP的函数重新定义限制在PHP中,多次定义一个相同名称的函数是一个no-no。尝试这样做,如提供的代码段所示,将导致可怕的“不能重新列出”错误。 但是,PHP工具腰带中有一个隐藏的宝石:runkit扩展。它使您能够灵活地重新定义函数。 runkit_function_renction_re...
    编程 发布于2025-06-27
  • Java中如何使用观察者模式实现自定义事件?
    Java中如何使用观察者模式实现自定义事件?
    在Java 中创建自定义事件的自定义事件在许多编程场景中都是无关紧要的,使组件能够基于特定的触发器相互通信。本文旨在解决以下内容:问题语句我们如何在Java中实现自定义事件以促进基于特定事件的对象之间的交互,定义了管理订阅者的类界面。以下代码片段演示了如何使用观察者模式创建自定义事件: args)...
    编程 发布于2025-06-27
  • 同实例无需转储复制MySQL数据库方法
    同实例无需转储复制MySQL数据库方法
    在同一实例上复制一个MySQL数据库而无需转储在同一mySQL实例上复制数据库,而无需创建InterMediate sqql script。以下方法为传统的转储和IMPORT过程提供了更简单的替代方法。 直接管道数据 MySQL手动概述了一种允许将mysqldump直接输出到MySQL clie...
    编程 发布于2025-06-27
  • C++中如何将独占指针作为函数或构造函数参数传递?
    C++中如何将独占指针作为函数或构造函数参数传递?
    在构造函数和函数中将唯一的指数管理为参数 unique pointers( unique_ptr [2启示。通过值: base(std :: simelor_ptr n) :next(std :: move(n)){} 此方法将唯一指针的所有权转移到函数/对象。指针的内容被移至功能中,在操作...
    编程 发布于2025-06-27
  • 如何在Java字符串中有效替换多个子字符串?
    如何在Java字符串中有效替换多个子字符串?
    在java 中有效地替换多个substring,需要在需要替换一个字符串中的多个substring的情况下,很容易求助于重复应用字符串的刺激力量。 However, this can be inefficient for large strings or when working with nu...
    编程 发布于2025-06-27
  • 在JavaScript中如何并发运行异步操作并正确处理错误?
    在JavaScript中如何并发运行异步操作并正确处理错误?
    同意操作execution 在执行asynchronous操作时,相关的代码段落会遇到一个问题,当执行asynchronous操作:此实现在启动下一个操作之前依次等待每个操作的完成。要启用并发执行,需要进行修改的方法。 第一个解决方案试图通过获得每个操作的承诺来解决此问题,然后单独等待它们: co...
    编程 发布于2025-06-27
  • 您如何在Laravel Blade模板中定义变量?
    您如何在Laravel Blade模板中定义变量?
    在Laravel Blade模板中使用Elegance 在blade模板中如何分配变量对于存储以后使用的数据至关重要。在使用“ {{}}”分配变量的同时,它可能并不总是最优雅的解决方案。幸运的是,Blade通过@php Directive提供了更优雅的方法: $ old_section =“...
    编程 发布于2025-06-27
  • PHP阵列键值异常:了解07和08的好奇情况
    PHP阵列键值异常:了解07和08的好奇情况
    PHP数组键值问题,使用07&08 在给定数月的数组中,键值07和08呈现令人困惑的行为时,就会出现一个不寻常的问题。运行print_r($月)返回意外结果:键“ 07”丢失,而键“ 08”分配给了9月的值。此问题源于PHP对领先零的解释。当一个数字带有0(例如07或08)的前缀时,PHP将其...
    编程 发布于2025-06-27

免责声明: 提供的所有资源部分来自互联网,如果有侵犯您的版权或其他权益,请说明详细缘由并提供版权或权益证明然后发到邮箱:[email protected] 我们会第一时间内为您处理。

Copyright© 2022 湘ICP备2022001581号-3