91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Immer如何使用

發布時間:2022-03-25 10:51:43 來源:億速云 閱讀:199 作者:iii 欄目:web開發

今天小編給大家分享一下Immer如何使用的相關知識點,內容詳細,邏輯清晰,相信大部分人都還太了解這方面的知識,所以分享這篇文章給大家參考一下,希望大家閱讀完這篇文章后有所收獲,下面我們一起來了解一下吧。

Immer本身也得到了廣泛關注和認可,在Redux最新推薦的Redux Toolkit 中就集成了Immer

Immer并不會對原有的狀態數據進行直接更改,這樣就保持了不可變性,但是在使用語法上卻是直接賦值,注意如圖所示,直接賦值的對象并不是原有的狀態數據,而是另一個Draft對象。

 const nextState = baseState.slice() // 淺拷貝

 nextState[1] = {

     // 替換元素

     …nextState[1], // 淺拷貝位置1的元素

     done: true // 修改

 }

 nextState.push({title: "Tweet about it"})

假如數據結構層次很深,同時又不想做范式化,因為一些業務場景范式化后的數據在使用時也還是要整合起來,不如直接使用樹狀數據來的方便,此時修改數據簡直就是噩夢,所以Immer針對的就是這種情況,它僅僅是處理了復雜數據的更新,并不涉及到副作用,以下例子摘自Immer官網

 import produce from "immer"

 const nextState = produce(baseState, draft => {

     draft[1].done = true

     draft.push({title: "Tweet about it"})

 })

可以看到,現在要得到更新后的狀態非常方便了,但如同剛才所說的一樣,Immer也僅僅只是半自動化,不涉及副作用,所以一般最后我們還是要調用setState 或者其他的操作來完成最終的業務目的。

安裝

 npm install immer

要注意的是如果想要得到額外的支持,還需要調用一些引入API,同時打包結果也會變大

支持 調用

支持ES5 enableES5()

支持Map和Set數據結構 enableMapSet()

支持JSON Patch enablePatches()

以上所有都想支持 enableAllPlugins()

用法

 // 在應用的入口處

 import {enableMapSet} from "immer"

 enableMapSet()

 // …稍后

 import produce from "immer"

 const usersById_v1 = new Map([

     ["michel", {name: "Michel Weststrate", country: "NL"}]

 ])

 const usersById_v2 = produce(usersById_v1, draft => {

     draft.get("michel")。country = "UK"

 })

 const usersById_v3 = produce(usersById_v1, draft => {

     draft.set("michel", {name: "Michel Weststrate", country: "NL"})

 })

使用produce

Immer的要點就在于produce的使用,它的簽名如下

 produce(currentState, recipe: (draftState) => void): nextState

注意這些名稱

produce

recipe

draftState / draft

producer

…

這些名稱沒法硬翻,或者翻譯后失去味道,只能靠揣摩和感悟

一個produce的HW代碼如下

 import produce from "immer"

 const baseState = [

     {

         title: "Learn TypeScript",

         done: true

     },

     {

         title: "Try Immer",

         done: false

     }

 ]

 const nextState = produce(baseState, draftState => {

     draftState.push({title: "Tweet about it"})

     draftState[1].done = true

 })

對了,HW不是華為,是Hello World

以上就是“Immer如何使用”這篇文章的所有內容,感謝各位的閱讀!相信大家閱讀完這篇文章都有很大的收獲,小編每天都會為大家更新不同的知識,如果還想學習更多的知識,請關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

汤原县| 闸北区| 池州市| 通州区| 建阳市| 沙湾县| 自治县| 阳东县| 镇原县| 集安市| 白河县| 霍州市| 茂名市| 西安市| 太谷县| 扬州市| 连江县| 东平县| 商丘市| 北海市| 醴陵市| 林州市| 蒙城县| 右玉县| 酒泉市| 乐至县| 福安市| 淳安县| 二手房| 名山县| 阜宁县| 临夏县| 鄢陵县| 榆中县| 西林县| 静海县| 通城县| 合阳县| 隆林| 方正县| 会同县|