2017-02-14 68 views
2

大多數教程在線表明裏面的初始化狀態的屬性應該是「」(如果它是一個字符串),如:如果裏面defaultState屬性爲空或「」

let defaultState = Immutable.fromJS({ 
    viewData: { 
     id: '', 
     name: '', 
     alist: [] 
    } 
}); 

但是,如果你不是有的明確說明哪些屬性有一定分量的習慣採用,如:

function mapStateToProps(state) { 
    return viewData: state.someReducer.get('data'); 
} 

someContainer.propTypes = { 
    data: ImmutablePropTypes.mapContains({ 
     id: React.PropTypes.string.isRequired, 
     name: React.PropTypes.string.isRequired, 
     aList: ImmutablePropTypes.list.isRequired 
    }), 
}; 

比我會得到「無法propType」是,如果任何屬性得到了來自減速刪除,isRequired莫名其妙的感覺多餘的,因爲唯一的出路它會一直給出一個空字符串而不是傳遞給someContainer子組件。

但是,如果我做的:

let defaultState = Immutable.fromJS({ 
    data: { 
     id: null, 
     name: null, 
     aList: null 
    } 
}); 

比我會得到一個失敗的proptype如果減速,沒有填充狀態,心不是這樣想?然而,因爲我很少看到其他人將道具設置爲空,我覺得有一個很好的理由不會。因爲它

而且,與空法狀態嵌套地圖吃不了混亂,甚至比可視數據爲空,但你失去了與沒有顯示它真的會得到什麼樣的數據信息:

let defaultState = Immutable.fromJS({ 
    viewData: { // Shouldnt this be null than as well? 
     id: null, 
     name: null, 
     hierarchies: { // and this 
      one: null, 
      two: null 
     } 
    } 
}); 

回答

2

null是一種完全可以接受的默認狀態 - 它的賦值指示這個特定的屬性沒有價值。

在遊戲中有一個更大的問題,完全取決於您的特定應用程序(只有您可以回答,如果null有意義),但要回答您關於「確定」的特定問題 - 是的,沒關係。

我不喜歡使用空字符串作爲默認狀態,我覺得很誤導的應用程序。例如,我的消耗部件,「理解」,一個null值意味着值尚未來提供,而一個空字符串意味着一個確實已經確定,但它僅僅是空的(可以說,沒有一箇中間名用戶 - 值是「」)。這允許應用程序更適當地處理應用程序的當前狀態。

順便說一句 - 它是一個非常好的問題不經常明確教程探索(你提到)。

+0

我喜歡你的說法 - 「一個空值表示值尚未提供,而一個空字符串意味着一個確實已經確定,但它僅僅是空的」,這讓很多道理。但是,當我嘗試了更多,也就是給我的整個狀態空我跑與地圖和性能問題,這些地圖 – user3711421

+0

我想你實際上是在問兩個問題裏 - 那是正確的,我怎麼會接近與immutablejs。如前所述,它確實意味着你的應用程序需要理解null和empty之間的區別(這是一件好事,因爲它應該理解這個區別) - 你可能需要在那裏進行一些空的檢查。 – Chris

+0

我想我是。我認爲你所說的話有很大的意義,但爲什麼沒有教程制定者這樣做?像丹阿布拉莫夫和泰勒mccginnis誰是在反應/ Redux的社區比較大的.....還有看到我更新的代碼:) .. – user3711421