immutable的初步學(xué)習(xí)

immutable是什么

Immutable data cannot be changed once created, leading to much simpler application development, no defensive copying, and enabling advanced memoization and change detection techniques with simple logic

immutable數(shù)據(jù)一旦被創(chuàng)建就不能被修改,這就使得程序開發(fā)變得更加簡易,無需進(jìn)行防數(shù)據(jù)修改式的復(fù)制,且通過簡單的邏輯就能實現(xiàn)高級存儲和修改檢測技術(shù)。
生硬的去翻譯的話,官網(wǎng)第一句話大致就是上述含義。
最近在使用react的時候,最常碰到的問題就是對于state中數(shù)據(jù)的更改變化,在多次嘗試之后,我發(fā)現(xiàn),在使用mobx的時候,一不注意就會修改覆蓋掉以前的值,如果沒有額外對于state中的值進(jìn)行防護(hù)性修改或者復(fù)制的話,就很容易為后續(xù)的開發(fā)埋下一些隱患。最近接觸到了immutable,于是做了一些相關(guān)的學(xué)習(xí)。

實踐中使用到的部分

  1. fromJS()
    該方法,主要用于將普通的js對象變換為immutable對象
const defaultState = fromJS({
    focused: false,
    list: [],
    page: 0,
    totalPage: 1,
    mouseIn: false,
});
  1. toJS()
    該方法,主要用于將immutable對象變換為普通的js對象
const {list} = this.props;
console.log('list in JS', list);
const newList = list.toJS();
console.log('list in Immutable', newList);
image.png
  1. get()(支持鏈?zhǔn)秸{(diào)用)
    該方法,主要用于在immutable對象中取得對應(yīng)的屬性,且不影響原值
  2. set()(支持鏈?zhǔn)秸{(diào)用)
    該方法,主要用于在immutable對象中設(shè)置對應(yīng)的屬性,在不改動原值的基礎(chǔ)上返回新修改的值
// 在set方法的實現(xiàn)細(xì)節(jié)中,會返回一個新的值,原來的focused不會因此發(fā)生變化
state.set('focused', true)
  1. getIn()
    如果當(dāng)我們的數(shù)據(jù)嵌套多層的時候,則可以使用getIn來縮小數(shù)據(jù)查找范圍。例如
// BAD
focused: state.get('header').get('focused'),
// GOOD
focused: state.getIn(['header', 'focused']),

此外,如果在給定范圍中找不到所需要的內(nèi)容,可以給出一個類似于回退機(jī)制的值notSetValue,例如:

image.png
image.png
image.png

很明顯,從所給出的值中根本找不到所謂的pag,那么此時如果想從props中取得對應(yīng)的page,自然會回退到我們給出的notSetValue,我稱之為未設(shè)值。
這樣一來,對于一開始不存在的值,我們可以設(shè)置一個默認(rèn)的值。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 這是16年5月份編輯的一份比較雜亂適合自己觀看的學(xué)習(xí)記錄文檔,今天18年5月份再次想寫文章,發(fā)現(xiàn)簡書還為我保存起的...
    Jenaral閱讀 3,179評論 2 9
  • 關(guān)于Mongodb的全面總結(jié) MongoDB的內(nèi)部構(gòu)造《MongoDB The Definitive Guide》...
    中v中閱讀 32,321評論 2 89
  • 設(shè)計模式概述 在學(xué)習(xí)面向?qū)ο笃叽笤O(shè)計原則時需要注意以下幾點:a) 高內(nèi)聚、低耦合和單一職能的“沖突”實際上,這兩者...
    彥幀閱讀 3,898評論 0 14
  • 昨天的鮮艷,已成裊裊煙嵐, 越過流光的魅影,化為花落的語言。低頭沉思之間,青春韶華已悄然。 此夕此處,不再少年。 ...
    橘色余生閱讀 320評論 0 2
  • 每一次我都在思考一個問題,為什么人要去旅行?也許在于未知,你不知道天是什么樣子,海是什么樣子,青山是什么樣子,遇到...
    1900妖閱讀 664評論 4 7

友情鏈接更多精彩內(nèi)容