日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

hooks组件封装 react_名符其实的react下一代状态管理器hox

發布時間:2025/3/15 编程问答 14 豆豆
生活随笔 收集整理的這篇文章主要介紹了 hooks组件封装 react_名符其实的react下一代状态管理器hox 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

自從 React16 版本發布 Hooks 以來,大家紛紛上車嘗鮮。毫無疑問, Hooks 在一定程度上解決了組件間功能和邏輯復用的問題,在組件間的邏輯的封裝和復用確實真香,但 Hooks 在數據狀態的共享方法略有不足,雖然可以使用 useReducer 實現數據狀態管理,但在一定程度上是對 redux 的思想的復用。我們知道 redux 、 Flux 、 dva 等這些 React 狀態管理的工具,實際上都是對 action 、 dispatch 、 reducer 、 useStore 、 Provider 、 Context 這些概念的排列組合,概念太多,學習入手成本較高,項目使用都差不多,會有產生許多的模版代碼。

hox

既然如此是否有學習成本比較低,入手簡單的針對 Hooks 的狀態管理器呢?答案是有,其中來自來自螞蟻金服體驗技術部 hox 就是這樣一種工具。下面我們從學習、上手、原理幾個方法聊聊這個被定為為下一代 React 狀態管理器,看看其是否符合其定位的目標。

學習

hox 來自螞蟻金服體驗技術部,其背后的團隊在 React 各種實踐場景上都有很豐富的經驗,因此其后續的維護和迭代還是很靠譜的??赡芤驗槠渲挥幸粋€ API ,因此其文檔也是十分簡單的,一眼就能看到頭了。這對于我們前端的開發者而言就是很友好的,由于千變萬化的前端,各種輪子、各種技術層出不窮,前端的娃娃們表示學不動了。而這種只有一個 API 的工具,我們表示還是可以學的動的。 hox 的詳細文檔可以參看 github 上的 readme 支持中英文,鏈接如下:

  • 中文文檔github.com/umijs/hox/b…
  • 英文文檔github.com/umijs/hox/b…
  • 特性

    hox 作為下一代的狀態管理器,其具有如下特性:

  • 只有一個 API,簡單高效,幾乎無需學習成本
  • 使用 custom Hooks 來定義 model,完美擁抱 React Hooks
  • 完美的 TypeScript 支持
  • 支持多數據源,隨用隨取
  • 上手

    hox 的上手使用體驗還是很不錯的,因為十分簡單。talk is cheap,show me code。我們直接上碼看看。

    import { useState } from "react";import { createModel } from "hox";function useCounter() { const [count, setCount] = useState(0); const decrement = () => setCount(count - 1); const increment = () => setCount(count + 1); return { count, decrement, increment };}export default createModel(useCounter);import useCounterModel from "../models/counter";function App(props) { const { count, increment, decrement } = useCounterModel(); return (

    {count}

    Increment Decrement );}

    使用 hox 就是這么簡單,通過 createModel 包裝一下將 custom hook 變成 share hook ,就可以在各個組件之間共享數據狀態,并實現邏輯封裝和復用。

    原理

    createModel 會創建一個 Executor 組件的實例,并在執行 custom hook , custom hook 的執行結果會被保存起來。最后,它會返回一個新的 share hook 即是 model hook 實現數據和邏輯的共享。源碼如下:

    import { ModelHook, UseModel } from "./types";import { Container } from "./container";import { Executor } from "./executor";import React, { useEffect, useRef, useState } from "react";import { render } from "./renderer";export function createModel(hook: ModelHook, hookArg?: P) { // 實例化一個容器,通過發布訂閱模式實現對狀態改變的推送 const container = new Container(hook); // 實例化 Executor 組件,當數據發生改變時,notify 所有訂閱者進行更新 render( { container.data = val; container.notify(); }} hook={() => hook(hookArg)} /> ); // useModel 這是 share hook const useModel: UseModel = depsFn => { const [state, setState] = useState(() => container ? (container.data as T) : undefined ); const depsFnRef = useRef(depsFn); depsFnRef.current = depsFn; const depsRef = useRef([]); useEffect(() => { if (!container) return; function subscriber(val: T) { if (!depsFnRef.current) { setState(val); } else { const oldDeps = depsRef.current; const newDeps = depsFnRef.current(val); if (compare(oldDeps, newDeps)) { setState(val); } depsRef.current = newDeps; } } container.subscribers.add(subscriber); return () => { container.subscribers.delete(subscriber); }; }, [container]); return state!; }; // share hook 代理 custom hook 返回的值 Object.defineProperty(useModel, "data", { get: function() { return container.data; } }); return useModel;}// 這是 hook 依賴項對比函數function compare(oldDeps: unknown[], newDeps: unknown[]) { if (oldDeps.length !== newDeps.length) { return true; } for (const index in newDeps) { if (oldDeps[index] !== newDeps[index]) { return true; } } return false;}

    其原理圖如下:

    總結

    簡言之, hox 大道至簡,只有一個 API ,但其既能滿足邏輯的封裝和復用,又能滿足狀態復用和管理,值得嘗試的狀態管理器。

    總結

    以上是生活随笔為你收集整理的hooks组件封装 react_名符其实的react下一代状态管理器hox的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 91影视在线观看 | 黄色片99| av免费资源| 国产精品白嫩白嫩大学美女 | 久久久999 | 一区二区欧美在线 | 九九精品热 | 国产精品久久久久久久免费观看 | 欧美视频精品在线 | 欧美高清性xxxxhdvideosex | 国产精品刘玥久久一区 | 女裸全身无奶罩内裤内衣内裤 | 一区二区三区四区影院 | 亚洲一区二区三区四区 | 午夜影院免费在线观看 | 人人妻人人爽一区二区三区 | 99国产精品一区二区三区 | 国产精品免费在线 | av中文天堂 | 精品黄色 | 国产手机精品视频 | 久久精品9 | 免费在线观看成年人视频 | 黄色成人免费观看 | 色噜噜影院 | 亚洲图片在线 | 成人看片 | 欧美福利视频在线观看 | 99久久亚洲精品日本无码 | 捆绑无遮挡打光屁股调教女仆 | 成人欧美视频 | 美女黄色av | 欧洲美一区二区三区亚洲 | 咪咪色在线视频 | 亚洲第一天堂久久 | 青青草视频在线看 | 国产免费看片 | 男人添女人囗交视频 | 成人美女在线观看 | 成人精品网 | www日本视频 | 亚洲手机在线观看 | 天堂网2020| 99免费在线| 亚洲av日韩av高潮潮喷无码 | 成年人免费网 | 免费av网站大全 | www日本色 | 樱花动漫无圣光 | 中文字幕 人妻熟女 | 男女猛烈无遮挡 | 风流僵尸艳片a级 | 欧美三级黄 | 欧美中文字幕在线播放 | 中文字幕在线2021 | 色噜噜狠狠一区二区三区果冻 | 偷拍一区二区三区 | 高级家教课程在线观看 | 麻豆短视频在线观看 | 在线不欧美| av成人在线网站 | 亚洲乱码国产乱码精品天美传媒 | 国产午夜一区二区三区 | 亚洲自拍偷拍在线 | 国产日韩一区 | 精品无码成人久久久久久免费 | 日日摸夜夜添狠狠添久久精品成人 | youjizz日本人 | 日韩国产在线一区 | 亚洲一区二区在线免费观看 | 中文字幕免费在线视频 | 免费级毛片 | a中文字幕 | 国产精品资源在线 | 天堂综合网 | 印度午夜性春猛xxx交 | 男男play视频| 老牛影视av牛牛影视av | 影音先锋在线视频 | 国产精品一区二区三区四区在线观看 | 精品亚洲综合 | 岛国精品在线 | 97香蕉久久夜色精品国产 | 午夜日韩在线 | 日韩激情床戏 | 91丨九色丨蝌蚪丨丝袜 | 最近日韩中文字幕 | 成人免费精品 | 欧美日韩a v | 手机在线观看av | 国产伦精品一区二区三区妓女下载 | 亚洲情se | 秋霞午夜鲁丝一区二区老狼 | 干一干操一操 | 国产精品亚洲а∨天堂免在线 | 夜夜cao| caoporn成人| 欧美天堂久久 | 免费特级毛片 |