”工欲善其事,必先利其器。“—孔子《论语.录灵公》
首页 > 编程 > 介绍 Origami-State-Manager (OSM):具有最少样板的轻量级状态管理库

介绍 Origami-State-Manager (OSM):具有最少样板的轻量级状态管理库

发布于2024-08-30
浏览:586

Introducing Origami-State-Manager (OSM): A Lightweight State Management Library with Minimal Boilerplate

管理 JavaScript 应用程序中的全局状态,尤其是当您需要跨 React 和非 React 上下文访问它时,可能具有挑战性。现有的库通常涉及繁重的设置、不必要的复杂性,并且与 React 紧密耦合。但是,如果您可以通过折纸的优雅和简单来管理状态呢?输入 折纸状态管理器 (OSM).


什么是OSM?

Origami-State-Manager (OSM),发音为“棒极了”, 是一个轻量级状态管理库,设计简单、灵活且可扩展。受日本折纸艺术(将一张普通的纸转变成复杂的设计)的启发,OSM 使您能够以同样优雅的方式管理应用程序的全局状态。就像纸张一样,它非常轻巧,非常适合注重简单性和性能的应用程序。


为什么选择 OSM?

构建 OSM 的旅程始于寻找一种解决方案,该解决方案可以:

  • 最小化样板文件:状态管理应该简单明了,并且需要尽可能少的设置。
  • 多才多艺:在 React 和非 React 上下文中无缝工作。
  • 保持轻量级:避免使用不必要的代码使您的包变得臃肿。
  • 保持灵活性和可扩展性:在保持性能的同时轻松适应不同的项目需求。

如果您厌倦了过度设计的解决方案,并且想要正常工作的东西,OSM 可能是您需要的“很棒”工具。


主要特点

  • 最小设置:使用干净、直观的 API 快速定义和管理您的全局状态。
  • React 和非 React 兼容性: 可以从 React 组件和普通 JavaScript 函数访问和更新状态。
  • 轻量级: OSM 轻如纸,让您的应用程序快速响应。
  • 持久化选项: 通过简单的配置使您的状态持久化。

OSM 入门

准备好向您的应用程序添加一些 OSM 功能了吗?开始方法如下:

1。安装库:

npm install origami-state-manager

2.创建商店:

商店是全球所有状态所在的地方。设置一个就像将初始状态值传递给 createStore 一样简单:

// store.ts
import { createStore } from "origami-state-manager";

const initialValues = {
  origami: 0,
  osmness: 0,
};

export const store = createStore(initialValues);

您还可以通过提供商店名称来使商店持久化:

export const store = createStore(initialValues, "myOSMness");

3.访问和更新状态:

对于React组件,使用useStateListener钩子来访问和更新状态:

import { store } from "./store";
import { useStateListener } from "origami-state-manager";

function OrigamiComponent() {
  const origami = useStateListener("origami", store);

  return (
    
  );
}

4。非 React 函数中的访问状态:

您也可以轻松地使用 React 之外的状态:

// utils.js

function getProfile() {
  let profile = store["profile"].value;
  if (!profile) {
    store["profile"].value = {};
  }

  return store["profile"].value;
}

用例

OSM 非常适合以下场景:

  • 您需要一个轻量级解决方案来进行简单的全局状态管理。
  • 您的项目涉及必须共享全局状态的 React 和非 React 逻辑。
  • 您希望避免 Redux 或 MobX 等大型库的复杂性。

警告:前方有一些麻烦!

OSM 仍处于早期阶段,尚未在所有环境中经过充分测试。虽然它非常适合小型项目和简单的国家需求,但建议在复杂场景中使用它时保持谨慎。如果您确实遇到任何问题,请报告它们,以便图书馆能够继续改进。


为 OSM 做出贡献

有兴趣帮助让 OSM 变得更加出色吗?欢迎贡献!查看贡献指南以开始使用。


保持更新

变更日志定期更新所有新的更改和改进。


最后的想法

Origami-State-Manager (OSM) 旨在为全局状态管理提供一个简单而强大的解决方案,而不会造成臃肿。通过保持最少的设置和较高的性能,OSM 使您能够专注于构建功能,而不是与状态复杂性作斗争。

尝试一下,在您的项目中体验新水平的OSM 性

立即开始​​使用 OSM:npm:origami-state-manager


版本声明 本文转载于:https://dev.to/abdulzahir/introducing-origami-state-manager-osm-a-lightweight-state-management-library-with-minimal-boilerplate-5b7n?1如有侵犯,请联系[email protected]删除
最新教程 更多>
  • 为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    为什么Microsoft Visual C ++无法正确实现两台模板的实例?
    The Mystery of "Broken" Two-Phase Template Instantiation in Microsoft Visual C Problem Statement:Users commonly express concerns that Micro...
    编程 发布于2025-03-12
  • UTF-8 vs. Latin-1:字符编码大揭秘!
    UTF-8 vs. Latin-1:字符编码大揭秘!
    [utf-8和latin1 在他们的应用中,出现了一个基本问题:什么辨别特征区分了这两个编码?超出其字符表现能力,UTF-8具有额外的几个优势。从历史上看,MySQL对UTF-8的支持仅限于每个字符的三个字节,这阻碍了基本多语言平面(BMP)之外的字符的表示。但是,随着MySQL 5.5的出现,...
    编程 发布于2025-03-12
  • 大批
    大批
    [2 数组是对象,因此它们在JS中也具有方法。 切片(开始):在新数组中提取部分数组,而无需突变原始数组。 令ARR = ['a','b','c','d','e']; // USECASE:提取直到索引作...
    编程 发布于2025-03-12
  • 如何在Java字符串中有效替换多个子字符串?
    如何在Java字符串中有效替换多个子字符串?
    在java 中有效地替换多个substring,需要在需要替换一个字符串中的多个substring的情况下,很容易求助于重复应用字符串的刺激力量。 However, this can be inefficient for large strings or when working with nu...
    编程 发布于2025-03-12
  • Part SQL注入系列:高级SQL注入技巧详解
    Part SQL注入系列:高级SQL注入技巧详解
    [2 Waymap pentesting工具:单击此处 trixsec github:单击此处 trixsec电报:单击此处 高级SQL注入利用 - 第7部分:尖端技术和预防 欢迎参与我们SQL注入系列的第7部分!该分期付款将攻击者采用的高级SQL注入技术 1。高...
    编程 发布于2025-03-12
  • 为什么PYTZ最初显示出意外的时区偏移?
    为什么PYTZ最初显示出意外的时区偏移?
    与pytz 最初从pytz获得特定的偏移。例如,亚洲/hong_kong最初显示一个七个小时37分钟的偏移: 差异源利用本地化将时区分配给日期,使用了适当的时区名称和偏移量。但是,直接使用DateTime构造器分配时区不允许进行正确的调整。 example pytz.timezone(...
    编程 发布于2025-03-12
  • 如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    如何修复\“常规错误:2006 MySQL Server在插入数据时已经消失\”?
    How to Resolve "General error: 2006 MySQL server has gone away" While Inserting RecordsIntroduction:Inserting data into a MySQL database can...
    编程 发布于2025-03-12
  • 我们如何保护有关恶意内容的文件上传?
    我们如何保护有关恶意内容的文件上传?
    对文件上载上传到服务器的安全性问题可以引入重大的安全风险,因为用户可能会提供潜在的恶意内容。了解这些威胁并实施有效的缓解策略对于维持应用程序的安全性至关重要。用户可以将文件名操作以绕过安全措施。避免将其用于关键目的或使用其原始名称保存文件。用户提供的MIME类型可能不可靠。使用服务器端检查确定实际...
    编程 发布于2025-03-12
  • 如何使用JavaScript中的正则表达式从字符串中删除线路断裂?
    如何使用JavaScript中的正则表达式从字符串中删除线路断裂?
    在此代码方案中删除从字符串在JavaScript中解决此问题,根据操作系统的编码,对线断裂的识别不同。 Windows使用“ \ r \ n”序列,Linux采用“ \ n”,Apple系统使用“ \ r。” 来满足各种线路断裂的变化,可以使用以下正则表达式: [&& && &&&&&&&&&&&...
    编程 发布于2025-03-12
  • 为什么使用Firefox后退按钮时JavaScript执行停止?
    为什么使用Firefox后退按钮时JavaScript执行停止?
    导航历史记录问题:JavaScript使用Firefox Back Back 此行为是由浏览器缓存JavaScript资源引起的。要解决此问题并确保在后续页面访问中执行脚本,Firefox用户应设置一个空功能。 警报'); }; alert('inline Alert')...
    编程 发布于2025-03-12
  • 如何使用PHP将斑点(图像)正确插入MySQL?
    如何使用PHP将斑点(图像)正确插入MySQL?
    essue VALUES('$this->image_id','file_get_contents($tmp_image)')";This code builds a string in PHP, but the function call ...
    编程 发布于2025-03-12
  • 我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    我可以将加密从McRypt迁移到OpenSSL,并使用OpenSSL迁移MCRYPT加密数据?
    将我的加密库从mcrypt升级到openssl 问题:是否可以将我的加密库从McRypt升级到OpenSSL?如果是这样,如何?答案:是的,可以将您的Encryption库从McRypt升级到OpenSSL。可以使用openssl。附加说明: [openssl_decrypt()函数要求iv参...
    编程 发布于2025-03-12
  • 在Java中使用for-to-loop和迭代器进行收集遍历之间是否存在性能差异?
    在Java中使用for-to-loop和迭代器进行收集遍历之间是否存在性能差异?
    For Each Loop vs. Iterator: Efficiency in Collection TraversalIntroductionWhen traversing a collection in Java, the choice arises between using a for-...
    编程 发布于2025-03-12
  • 如何检查对象是否具有Python中的特定属性?
    如何检查对象是否具有Python中的特定属性?
    方法来确定对象属性存在寻求一种方法来验证对象中特定属性的存在。考虑以下示例,其中尝试访问不确定属性会引起错误: >>> a = someClass() >>> A.property Trackback(最近的最新电话): 文件“ ”,第1行, AttributeError: SomeClass...
    编程 发布于2025-03-12
  • Java HashSet/LinkedHashSet随机元素获取方法详解
    Java HashSet/LinkedHashSet随机元素获取方法详解
    在编程中找到一个随机元素,在编程中找到一个随机元素,从集合(例如集合)中选择一个随机元素很有用。 Java提供了多种类型的集合,包括障碍物和链接HASHSET。本文将探讨如何从这些特定集合实现的过程中选择一个随机元素。的java的hashset和linkedhashset a HashSet代表...
    编程 发布于2025-03-12

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

Copyright© 2022 湘ICP备2022001581号-3