從0死磕全棧第五天:React 使用zustand實現To-Do List項目

代碼世界是現實的鏡像,狀態管理教會我們:真正的控制不在于凝固不變,而在于優雅地引導變化。

這是「從0死磕全棧」系列的第5篇文章,前面我們已經完成了環境搭建、路由配置和基礎功能開發。今天,我們將引入一個輕量級但強大的狀態管理工具 —— Zustand,來實現一個完整的 TodoList 應用。


Zustand 簡介

Zustand 是一個輕量級、靈活的 React 狀態管理庫,以極簡 API 解決復雜狀態共享問題。

  • ? 無需 Provider 包裹,直接導入使用
  • ? 使用 create 創建 store,通過 useStore 隨時隨地訪問狀態
  • ? 支持中間件(如持久化、日志)、異步邏輯
  • ? 代碼簡潔易維護,是中小型項目的理想選擇

下面我們將用 React + TypeScript + Zustand 實現一個功能完整的 TodoList。


要實現的功能

  1. 添加待辦事項

    • 在輸入框中輸入內容,點擊“添加”按鈕或按 Enter 鍵
    • 新事項添加到列表底部
  2. 標記完成/未完成

    • 點擊復選框切換完成狀態
    • 已完成事項顯示刪除線樣式
  3. 刪除事項

    • 點擊右側“刪除”按鈕移除該事項
  4. 統計信息

    • 顯示總事項數和已完成事項數

1. 安裝依賴

npm install zustand

2. 創建 Zustand Store

// store/todoStore.ts
import { create } from 'zustand';// 定義 Todo 項的類型
interface Todo {id: number;text: string;completed: boolean;
}// 定義 Store 的類型
interface TodoStore {todos: Todo[];addTodo: (text: string) => void;toggleTodo: (id: number) => void;deleteTodo: (id: number) => void;
}// 創建 Zustand Store
const useTodoStore = create<TodoStore>((set) => ({// 初始狀態:空數組todos: [<

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/web/95874.shtml
繁體地址,請注明出處:http://hk.pswp.cn/web/95874.shtml
英文地址,請注明出處:http://en.pswp.cn/web/95874.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

力扣29. 兩數相除題解

原題鏈接29. 兩數相除 - 力扣&#xff08;LeetCode&#xff09; 主要不能用乘除取余&#xff0c;于是用位運算代替&#xff1a; Java題解 class Solution {public int divide(int dividend, int divisor) {//全都轉為負數計算, 避免溢出, flag記錄結果的符號int flag 1;if(…

【工具類】Nuclei YAML POC 編寫以及批量檢測

Nuclei YAML POC 編寫以及批量檢測法律與道德使用聲明前言Nuclei 下載地址下載對應版本的文件關于檢查cpu架構關于hkws的未授權訪問參考資料關于 Neclei Yaml 腳本編寫BP Nuclei Template 插件下載并安裝利用插件編寫 POC YAML 文件1、找到有漏洞的頁面抓包發送給插件2、同時將…

自動化運維之ansible

一、認識自動化運維假如管理很多臺服務器&#xff0c;主要關注以下幾個方面“1.管理機與被管理機的連接&#xff08;管理機如何將管理指令發送給被管理機&#xff09;2.服務器信息收集&#xff08;如果被管理的服務器有centos7.5外還有其它linux發行版&#xff0c;如suse,ubunt…

【溫室氣體數據集】亞洲地區長期空氣污染物和溫室氣體排放數據 REAS

目錄 REAS 數據集概述 REAS 數據版本及特點 數據內容(以 REASv3.2.1 為例) 數據形式 數據下載 參考 REAS 數據集(Regional Emission inventory in ASia,亞洲區域排放清單)是由日本國立環境研究所(NIES)及相關研究人員開發的一個覆蓋亞洲地區長期空氣污染物和溫室氣體排放…

中州養老項目:利用Redis解決權限接口響應慢的問題

目錄 在Java中使用Redis緩存 項目中集成SpringCache 在Java中使用Redis緩存 Redis作為緩存,想要在Java中操作Redis,需要 Java中的客戶端操縱Redis就像JDBC操作數據庫一樣,實際底層封裝了對Redis的基礎操作 如何在Java中使用Redis呢?先導入Redis的依賴,這個依賴導入后相當于把…

MathJax - LaTeX:WordPress 公式精準呈現方案

寫在前面&#xff1a;本博客僅作記錄學習之用&#xff0c;部分圖片來自網絡&#xff0c;如需引用請注明出處&#xff0c;同時如有侵犯您的權益&#xff0c;請聯系刪除&#xff01; 文章目錄前言安裝 MathJax-LaTeX 插件修改插件文件效果總結互動致謝參考前言 在當今知識傳播與…

詳細解讀Docker

1.概述Docker是一種優秀的開源的容器化平臺。用于部署、運行應用程序&#xff0c;它通過將應用及其依賴打包成輕量級、可移植的容器&#xff0c;實現高效一致的運行效果&#xff0c;簡單來說&#xff0c;Docker就是一種輕量級的虛擬技術。2.核心概念2.1.容器&#xff08;Contai…

GEE:基于自定義的年度時序數據集進行LandTrendr變化檢測

本文記錄了使用自己的年度時序數據集,進行 LandTrendr 變化檢測的代碼。結果輸出變化年份、變化幅度以及變化持續時間。 結果如下圖所示, 文章目錄 一、核心函數 二、代碼 三、代碼鏈接 一、核心函數 var eeltgcm = require(users/949384116/lib:LandTrendr/getChangeMap)v…

PostgreSQL收集pg_stat_activity記錄的shell工具pg_collect_pgsa

這是一個純腳本工具&#xff0c;用于從PostgreSQL的pg_stat_activity視圖中定期收集數據并保存到本地日志文件。 相關背景&#xff1a; 某個慢SQL打滿內存&#xff0c;導致系統kill掉postgres的某個進程&#xff0c;進而導致postgres進程重啟&#xff0c;沒有現場排查不了具體…

通俗的話語解讀《銀行保險機構信息科技外包風險監管辦法》

這份文件不是 “紙上規矩”&#xff0c;而是銀行保險機構做信息科技外包的 “實操手冊”—— 從要不要外包、選誰合作&#xff0c;到怎么管過程、防風險&#xff0c;再到出問題怎么應對&#xff0c;都給了明確方向。作為管理者&#xff0c;核心是把這些要求落地到日常決策和系統…

芯片ATE測試PAT(Part Average Testing)學習總結-20250916

目錄 一、基本概念 二、靜態PAT 三、動態PAT 四、參考鏈接: 一、基本概念 零件平均測試(Part Average Testing,PAT)是一種基于統計學的質量控制方法,主要用于半導體制造中篩選出與正常參數范圍偏差較大的“異常值”芯片,以提高產品質量和可靠性; 二、靜態PAT 靜態…

【數據結構、java學習】數組(Array)

1&#xff0c;概念 數組一旦定義&#xff0c;其維數和維界就不再改變。 因此除了結構的初始化和銷毀之外&#xff0c;數組只有存取元素和修改元素值的操作。Array可以存放對象類型、基本數據類型的數據。數組中元素在內存中按順序線性存放&#xff0c;通過第一個元素就能訪問隨…

58-正則表達式

1. 概念正則表達式是一種用來匹配字符串的強有力的武器.設計思想&#xff1a;用一種描述性的語言來給字符串定義一個規則&#xff0c;凡是符合規則的字符串&#xff0c;就認為它"匹配"【合法】否則就是不匹配[不合法]舉例&#xff1a;beijinglishao163.com2. 規則 1.…

圖片木馬制作的三種方法

本文轉自&#xff1a;https://www.cnblogs.com/cybersecuritystools/p/14932567.html 0x01什么是圖片木馬&#xff1f; 圖片木馬在網絡上沒有統一的定義&#xff0c;在這里我給出自己的定義。圖片木馬是一張能正常顯示又包含惡意代碼&#xff08;比如一句話木馬&#xff09;的…

【Redis】緩存的穿透、擊穿和雪崩

引言要了解緩存的這幾個相關問題&#xff0c;我們先以一個例子來引入&#xff1a;有一個get請求&#xff1a;api/news/getById/1正常情況下對其申請訪問的流程如圖&#xff1a;但若是如此&#xff0c;訪問增多或者受到攻擊時很容易受到以下問題1 緩存穿透1.1 造成原因當查詢一個…

打造一款高穩定、低延遲、跨平臺RTSP播放器的技術實踐

一、引言 RTSP&#xff08;Real Time Streaming Protocol&#xff09;作為經典的實時流媒體協議&#xff0c;已經深深嵌入到安防監控、遠程教育、工業巡檢、低空經濟、醫療影像傳輸等行業之中&#xff0c;可以說是這些場景的視頻傳輸“基礎設施”。一個穩定的 RTSP 播放器&…

C++_數據結構

數據結構是計算機存儲、組織數據的方式&#xff0c;它使得數據能夠被高效地訪問和修改。根據數據元素之間關系的不同特性&#xff0c;數據結構可以分為多種類型。主要可以分為兩大類&#xff1a;邏輯結構和物理結構&#xff08;也稱存儲結構&#xff09;。 一、邏輯結構&#x…

一個正常的 CSDN 博客賬號,需要做哪些基礎準備?

一個正常的 CSDN 博客賬號&#xff0c;需要做哪些準備&#xff1f; CSDN&#xff08;中國軟件開發網&#xff09;作為國內最具影響力的技術社區之一&#xff0c;不僅是開發者獲取信息的重要平臺&#xff0c;也是技術人建立個人品牌、輸出知識、積累影響力的重要陣地。想要把一…

【Python基礎】 17 Rust 與 Python 運算符對比學習筆記

一、算術運算符運算符Rust &#x1f980;Python &#x1f40d;示例 (Rust)示例 (Python)說明加法加法let sum 5 3;sum 5 3-減法減法let diff 5 - 3;diff 5 - 3*乘法乘法let product 5 * 3;product 5 * 3/除法除法let quotient 5 / 3; → 1quotient 5 / 3 → 1.666...…

單鏈表逆序java

在Java中實現單鏈表的逆序&#xff0c;可以通過迭代或遞歸兩種方式。以下是兩種方法的詳細實現&#xff1a; 1. 迭代方法&#xff08;推薦&#xff09; public class ListNode {int val;ListNode next;ListNode(int x) { val x; } }class Solution {public ListNode reverseLi…