」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > Pulsy 自述文件已更新

Pulsy 自述文件已更新

發佈於2024-11-08
瀏覽:680

Pulsy Readme updated

Pulsy - React 的轻量级状态管理库

Pulsy 是一个轻量级、灵活且易于使用的 React 状态管理库,提供持久性、中间件、记忆、计算和组合存储、时间旅行和 DevTools 集成等功能。它可以帮助您有效地管理 React 应用程序中的全局状态,而无需不必要的复杂性。

特征

  • 全局状态管理:使用简单的存储 API 管理跨组件的状态。
  • 持久化:自动将存储数据持久化到localStorage或自定义存储解决方案中。
  • 中间件:通过中间件功能修改和处理商店更新。
  • 记忆化:通过使用记忆状态值避免不必要的渲染。
  • 计算存储:从现有存储中导出并计算状态。
  • 可组合存储:将多个存储合并为一个存储以进行模块化状态管理。
  • 时间旅行:快退和快进状态变化。
  • DevTools Integration:在开发模式下跟踪和调试状态更新。

安装


npm install pulsy
# or
yarn add pulsy



基本用法

第 1 步:配置 Pulsy

Pulsy 可以进行全局配置,以启用 DevTools、默认记忆、持久性和用于商店创建和更新的回调挂钩。


import { configurePulsy } from 'pulsy';

configurePulsy({
  enableDevTools: process.env.NODE_ENV === 'development',
  persist: true, // Globally enable persistence by default
  defaultMemoize: true, // Enable memoization for all stores by default
  onStoreCreate: (name, initialValue) => console.log(`Store "${name}" created! Initial value:`, initialValue),
  onStoreUpdate: (name, newValue) => console.log(`Store "${name}" updated! New value:`, newValue),
});


第 2 步:创建商店

要创建商店,请使用 createStore 函数。存储保存全局状态,可以在 React 应用程序中的任何位置使用。


import { createStore } from 'pulsy';

// Create a store named 'counter' with an initial value of 0
createStore('counter', 0);


第 3 步:在组件中使用 Store

Pulsy 提供了 usePulsy 钩子来访问和更新 React 组件中的 store 的值。让我们创建一个计数器组件:


import usePulsy from 'pulsy';

function CounterComponent() {
  const [count, setCount] = usePulsy('counter');

  const increment = () => setCount((prev) => prev   1);

  return (
    

Current Count: {count}

); } export default CounterComponent;

坚持

Pulsy 可以轻松地将存储值保存在 localStorage 或任何其他自定义存储系统中。只需在创建商店时传递 persist 选项即可。


createStore('counter', 0, { persist: true });


计数器存储的值现在将在页面重新加载时保持不变。

示例:使用自定义存储

您还可以配置 Pulsy 使用自定义存储,例如 sessionStorage 或任何其他实现 Storage 接口的存储引擎:


createStore('sessionCounter', 0, {
  persist: {
    storage: sessionStorage, // Use sessionStorage instead of localStorage
    serialize: (value) => JSON.stringify(value),
    deserialize: (value) => JSON.parse(value),
  },
});


这会将 sessionCounter 存储在 sessionStorage 中。


中间件

中间件允许您在提交存储更新之前拦截和修改它们。您可以在创建商店时添加中间件,或者稍后使用 addMiddleware.


const loggingMiddleware = (nextValue, prevValue, storeName) => {
  console.log(`[${storeName}] changed from ${prevValue} to ${nextValue}`);
  return nextValue;
};

createStore('counter', 0, { middleware: [loggingMiddleware] });


在此示例中,中间件记录计数器存储中的每个状态更改。

示例:异步中间件

Pulsy 支持异步中间件来处理 API 调用等异步任务:


const asyncMiddleware = async (nextValue, prevValue, storeName) => {
  console.log(`Fetching data before updating ${storeName}...`);
  const data = await fetch('https://api.example.com/data').then((res) => res.json());
  return nextValue   data.amount;
};

createStore('counter', 0, { middleware: [asyncMiddleware] });


在此示例中,中间件在更新存储之前从 API 获取一些数据。


时间旅行状态管理

Pulsy 允许您使用 useTimeTravel 挂钩管理状态历史记录,使您能够撤消和重做状态更改。


import { useTimeTravel } from 'pulsy';

function TimeTravelCounter() {
  const [count, setCount, undo, redo] = useTimeTravel('counter');

  return (
    

Count: {count}

); }

示例:显示状态历史记录

您可以使用useTimeTravel提供的historyRef访问状态更改的完整历史记录:


function HistoryCounter() {
  const [count, setCount, undo, redo, history] = useTimeTravel('counter');

  return (
    

Count: {count}

History: {history.join(', ')}

); }

计算存储

计算存储从其他存储中获取其状态。 Pulsy 允许您创建其值基于一个或多个其他商店的商店。


import { createComputedStore } from 'pulsy';

createComputedStore('doubleCounter', () => {
  const counter = getStoreValue('counter');
  return counter * 2;
}, ['counter']);


这里,只要计数器存储发生变化,doubleCounter就会自动更新。

示例:显示组件中的计算存储

您现在可以像访问常规商店一样访问计算存储:


function DoubleCounterComponent() {
  const [doubleCount] = usePulsy('doubleCounter');

  return (
    

Double Counter: {doubleCount}

); }

组合商店

Pulsy 支持将多个商店合并为一个商店。这对于通过将相关状态片段分组在一起来管理复杂状态特别有用。


import { composeStores } from 'pulsy';

const [getComposedStore, setComposedStore] = composeStores('userProfile', {
  username: 'userNameStore',
  age: 'ageStore',
});

const UserProfileComponent = () => {
  const userProfile = getComposedStore();

  return (
    

Username: {userProfile.username}

Age: {userProfile.age}

); };

示例:更新组合存储

您还可以使用 setCompositedStore 函数更新组合存储的特定部分:


setComposedStore({
  username: 'newUsername',
});



命名空间存储

Pulsy 允许您创建命名空间存储,以保持相关存储的组织性并避免大型应用程序中的命名冲突。


import { createNamespacedStore } from 'pulsy';

// Create a namespaced store for user-related data
const useUserStore = createNamespacedStore('user');

function UserComponent() {
  const [username, setUsername] = useUserStore('username');

  return (
    

Username: {username}

); }

这里,所有与用户相关的存储(例如,user:username、user:age)都分组在用户命名空间下。


开发工具集成

Pulsy 与浏览器 DevTools 集成,以帮助跟踪和调试商店更新。启用 DevTools 后,您将在控制台中看到有关商店更新、状态更改和性能测量的日志。


configurePulsy({
  enableDevTools: true, // Logs detailed store activity to the console
});


Pulsy 记录有用的信息,例如何时创建或更新商店、中间件执行以及开发模式下的时间旅行操作。


完整示例:使用持久性和中间件管理用户配置文件

让我们将多个 Pulsy 功能组合到一个示例中。


import { createStore, usePulsy, configurePulsy } from 'pulsy';

// Global configuration
configurePulsy({
  enableDevTools: true,
  persist: true,
});

// Middleware to log store updates
const loggingMiddleware = (nextValue, prevValue, storeName) => {
  console.log(`Store ${storeName}

 updated from ${prevValue} to ${nextValue}`);
  return nextValue;
};

// Create a store for user profile
createStore('userProfile', {
  username: 'guest',
  age: 25,
}, { middleware: [loggingMiddleware], persist: true });

// Component to manage user profile
function UserProfileComponent() {
  const [userProfile, setUserProfile] = usePulsy('userProfile');

  const updateUsername = () => {
    setUserProfile((prevProfile) => ({
      ...prevProfile,
      username: 'newUsername',
    }));
  };

  return (
    

Username: {userProfile.username}

Age: {userProfile.age}

); } export default UserProfileComponent;

在此示例中,userProfile 存储由中间件持久保存、记录,并可通过 usePulsy 挂钩访问。 UserProfileComponent 在简单的 UI 中显示和更新商店。


结论

Pulsy 是一个强大且灵活的 React 状态管理库,为持久性、中间件、计算存储、时间旅行和 DevTools 提供开箱即用的支持。其简单的 API 和广泛的功能使其适用于小型和大型应用程序。

版本聲明 本文轉載於:https://dev.to/ng_dream_3e53e6a868268e4d/pulsy-readme-updated-15l6?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 使用 SAM 框架建置 Go Serverless REST API 並部署到 AWS (Amazon Linux untime)
    使用 SAM 框架建置 Go Serverless REST API 並部署到 AWS (Amazon Linux untime)
    为什么还要另一个 Go 教程 AWS 最近已弃用多项服务和运行时。正如我们所看到的,随着我们喜爱的 CodeCommit 和其他关键服务的终止,AWS Lambda 函数不再支持 Go1.x。 如果您尝试部署大部分过时的教程,您可能会遇到如下错误: Resource creatio...
    程式設計 發佈於2024-11-08
  • C 中的不相交聯合
    C 中的不相交聯合
    目前还不清楚如何在 C: 中表达此 Haskell 类型 data Tree = Leaf Int | Inner Tree Tree 与 Haskell 和 Rust 等语言不同,C 缺乏对的内置支持 不相交联合。然而,如果我们愿意做一些额外的输入,它确实提供了代表它们所需的所有成分。 首先要认识...
    程式設計 發佈於2024-11-08
  • 社群媒體上的圖文貼文有何作用?
    社群媒體上的圖文貼文有何作用?
    圖形貼文透過提高用戶參與度和強化品牌形像在社群媒體行銷中發揮著至關重要的作用。在 Instagram、LinkedIn 和 Facebook 等快節奏的社交平台中,用戶會滾動瀏覽大量內容,引人注目的視覺效果可以讓您的貼文脫穎而出。圖形快速有效地傳達訊息,使其成為與受眾溝通的強大工具。 ...
    程式設計 發佈於2024-11-08
  • 如何使用 javac、Ant 或 Maven 遞歸編譯多個 Java 檔案?
    如何使用 javac、Ant 或 Maven 遞歸編譯多個 Java 檔案?
    如何使用javac 遞歸編譯所有Java 檔案為每個套件使用單獨的shell 指令編譯分佈在多個套件中的大量Java 檔案可能會很乏味包裹。相反,請考慮使用以下方法之一來簡化編譯。 方法1:使用@source產生一個文字檔案(例如,sources.txt) txt),其中列出了要編譯的所有Java文...
    程式設計 發佈於2024-11-08
  • 如何存取 PHP $_GET 數組中的多值參數?
    如何存取 PHP $_GET 數組中的多值參數?
    在 PHP $_GET 陣列中存取多值參數PHP 的 $_GET 超全域數組允許存取查詢字串參數。預設情況下,當為相同參數指派多個值時,僅最後一個值會儲存在 $_GET 中。但是,可以以數組形式檢索此類值。 建立多值$_GET 參數要為查詢字串中的參數傳送多個值,只需使用方括號表示法:http://...
    程式設計 發佈於2024-11-08
  • 如何使用 Python 在文件的特定位置插入一行?
    如何使用 Python 在文件的特定位置插入一行?
    在Python中的文件中間插入一行在文件中的指定位置插入一行,同時保持文件的完整性現有內容可以使用Python 的檔案處理功能來實現。 要在文件中的索引 x 處插入一行,請按照下列步驟操作:開啟檔案進行讀取。 使用 readlines() 方法將整個文件讀入行列表。 使用 insert() 方法在指...
    程式設計 發佈於2024-11-08
  • React、Vue 和 Svelte 中的 JavaScript 框架 – 選擇哪一個?
    React、Vue 和 Svelte 中的 JavaScript 框架 – 選擇哪一個?
    JavaScript 框架在过去几年中取得了显着的发展,成为现代 Web 应用程序的支柱。 2024 年,React、Vue 和 Svelte 脱颖而出,成为最受欢迎的框架,每个框架都有其独特的优点和缺点。如果您正在构建新的 Web 应用程序,选择正确的框架对于项目的成功至关重要。 在本文中,我们将...
    程式設計 發佈於2024-11-08
  • ## 當方法具有指標接收器時,我什麼時候應該避免在 Go 中複製實例?
    ## 當方法具有指標接收器時,我什麼時候應該避免在 Go 中複製實例?
    複製實例時指針接收器的重要性操作資料時,請理解按引用或按值傳遞值的細微差別至關重要。在 Go 中,方法可以使用值接收器或指標接收器來定義,理解這種選擇的含義至關重要,尤其是在複製實例時。 值接收器具有值接收器的方法對它們接收到的值的副本進行操作。方法內所做的任何修改都不會影響原始值。這確保了在複製的...
    程式設計 發佈於2024-11-08
  • 如何修改不可變 Python 字串中的單一字元?
    如何修改不可變 Python 字串中的單一字元?
    錯誤:'str'物件不支援專案分配錯誤:'str'物件不支援專案分配Python字串是不可變的,這意味著一旦創建,它們的單一字元就不能被修改修改的。嘗試直接使用項目分配來修改字元(如代碼s2[j] = s1[i] 所示)會導致錯誤「TypeError: 'st...
    程式設計 發佈於2024-11-08
  • 使用 Java Spring Boot 和 JdbcTemplate 設定 JDBC 以連接到 Databricks
    使用 Java Spring Boot 和 JdbcTemplate 設定 JDBC 以連接到 Databricks
    在軟體開發領域,連接到各種資料來源是一項基本技能。 Databricks 是一個基於雲端的資料分析平台,提供了一種處理和分析大量資料的強大方法。在這篇文章中,我們將探討如何使用 Java 和 Spring 的 JdbcTemplate 來配置 JDBC 連線來連接到 Databricks,讓您能夠充...
    程式設計 發佈於2024-11-08
  • Copilotkit:您的程式設計冒險人工智慧僚機
    Copilotkit:您的程式設計冒險人工智慧僚機
    简介:当人工智能遇见代码(火花四溅) 在不断发展的科技世界中,算法起舞,数据流歌唱,镇上出现了一位新玩家:Copilotkit。这就像有一个非常聪明的朋友,他从不睡觉,不会喝掉你所有的咖啡,也不会因为你凌晨 3 点穿着睡衣编码而评判你。欢迎来到编码的未来,人工智能不仅是辅助,而且是...
    程式設計 發佈於2024-11-08
  • 如何修復 Mac 上的 Java 8 安裝問題
    如何修復 Mac 上的 Java 8 安裝問題
    解決Mac 上Java 8 的安裝問題您關於Mac 上Java 8 安裝檔案的意外位置和兼容性挑戰的查詢重點開發商面臨的共同問題。本文旨在提供一個全面的解決方案來解決這些問題。 安裝異常Oracle的Java安裝程式傾向於將Java 8檔案放在/Library/Java/JavaVirtualMac...
    程式設計 發佈於2024-11-08
  • useMemo 與 useCallback
    useMemo 與 useCallback
    介紹 React 提供了廣泛的鉤子來幫助我們有效地建立動態應用程式。在這些鉤子中,useMemo和useCallback是提高元件效能的重要工具。儘管兩者都有相似的目的——防止不必要的重新計算或函數重新創建——但它們適用於不同的場景。 在本文中,我們將探討 useMemo 和 u...
    程式設計 發佈於2024-11-08
  • 為什麼 MDM 很重要:優勢和商業價值
    為什麼 MDM 很重要:優勢和商業價值
    在当今的数字经济中,数据是每个成功企业的基石。随着组织生成的信息呈指数级增长,主数据的有效管理已成为当务之急。主数据管理 (MDM) 是管理组织关键数据资产(例如客户信息、产品详细信息和财务记录)的战略流程,确保所有部门和系统的准确性、一致性和可访问性。但为什么 MDM 很重要?更重要的是,它能带来...
    程式設計 發佈於2024-11-08
  • 使用 MetaTrader 訂單管理和市場資料收集進行自動交易
    使用 MetaTrader 訂單管理和市場資料收集進行自動交易
    Your AsimovMT class provides a comprehensive interface for interacting with MetaTrader5 (MT5) using Python. However, there are several areas in your c...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3