簡體   English   中英

兩個不同的減速器文件中是否允許兩個具有相同名稱的動作/減速器?

[英]Are two actions/reducers with the same name permissible in two different reducer files?

我對某事感到好奇。 我一直認為一個人可以在兩個不同的減速器中有兩個同名的動作,並且 Redux 會找出正確的一個來調用。

例如,假設您有以下設置:

  • Reducer1:使用 UPDATE_TEXT 減速器
  • Reducer2:使用 UPDATE_TEXT 減速器

然后在您的 React 組件文件中,當您加載正確的操作文件時,它就會知道要調用哪個減速器。 但測試表明情況並非如此。

我在想象事情嗎? 有沒有辦法隔離和消除這種沖突? 還是必須小心謹慎,永遠不要給兩個不同的減速器使用相同的動作名稱?

當您調度一個動作時說getData它通常與一個類型相關聯,比如GET_DATA 如果你以不同的方式命名你的兩個動作但使用相同的類型,那么在類型名稱匹配的所有情況下都會觸發 reducer。 因此,最好仔細命名您的操作。

我通常更喜歡使用 Ducks 模式來設置我的 redux。 因此,我在所有動作類型名稱前加上它所屬的鴨子名稱。 這有助於我隔離操作。

您可以查看以下內容以獲取更多信息

  1. 動作 Redux
  2. 鴨子圖案

每當調度一個動作時, 所有 Redux 切片減速器都會被調用,並有機會更新其 state 以響應該動作

Reducers 通常檢查action.type字符串來決定他們是否應該處理這個動作,這通常是根據動作類型的精確字符串匹配來完成的:

// switch statements
switch(action.type) {
  case 'todos/todoAdded': {}
}

// lookup tables
const caseReducer = caseReducers[action.type];

if (caseReducer) {}

所以是的,如果多個減速器正在尋找完全相同的動作類型字符串,它們最終都會更新他們的 state 作為響應。 這是有意的——我們鼓勵多個 reducer 處理相同的操作

這也意味着如果你想區分多個動作,你必須給每個動作一個唯一的類型字符串。

這就是Redux 工具包createSlice function 接受name字符串的原因 - 以幫助使每個動作類型更加獨特,因此'sliceA/event''sliceB/event'不同。

(請注意,無論如何,您確實應該使用 Redux Toolkit 來編寫所有 Redux 邏輯。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM