[英]Are two actions/reducers with the same name permissible in two different reducer files?
我對某事感到好奇。 我一直認為一個人可以在兩個不同的減速器中有兩個同名的動作,並且 Redux 會找出正確的一個來調用。
例如,假設您有以下設置:
然后在您的 React 組件文件中,當您加載正確的操作文件時,它就會知道要調用哪個減速器。 但測試表明情況並非如此。
我在想象事情嗎? 有沒有辦法隔離和消除這種沖突? 還是必須小心謹慎,永遠不要給兩個不同的減速器使用相同的動作名稱?
每當調度一個動作時, 所有 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.