2017-09-16 38 views
0

說我有一個反應組件,它發生在一個id道具,像這樣:識別reducer中的React組件?

<Test id=3/> 

在其相應的減速功能,我怎麼能確定我有根據id工作的哪個部件?

測試組件在其prop中也有一些功能,如果影響任何內容,它們將作爲默認導出。

+0

'this.props.id'? – Dekel

+0

減速機沒有引用'this',除非我失去了一些東西? – tweetypi

+0

添加減速器 – Dekel

回答

1

減速機沒有也不應該對零部件一無所知。
它們是接受一個動作並返回下一個狀態的純函數。
例如,如果我們派出這樣一個動作:
{type: "ANSWER_UPVOTED", id: '123456'}
那麼我們可能有一個處理此操作的減速機:

const upvotesReducer = (state = {}, action) => { 
    switch (action.type) { 
     case "ANSWER_UPVOTED": { 
      const currentAnswer = state.find(a => a.id == action.id); 
      return { 
       ...currentAnswer, 
       votes: currentAnswer.numOfVotes + 1 
      } 
     } 

     default: return state; 
    } 
} 

現在,如果您的組件連接到redux將有機會獲得新州。

+0

,以便在使用相同reducer的所有組件之間共享狀態? – tweetypi

+0

不完全是,'state'是全局的,每個連接到'redux'的組件都可以訪問**整個**'狀態'。分割reducer來處理'state'的一部分只是使它更容易維護和擴展,但你仍然有一個'redux'' state'(藉助[combineReducers](http://redux.js)。 org/docs/api/combineReducers.html)) –

+1

哦,是的,這是有道理的。我把減速器和東西結合起來所做的所有事情讓我忘記了它背後真正存在的單一狀態。我想我可以用你提供的答案來解決我的問題。 – tweetypi

1

減速器是純粹的功能來改變存儲和觀察對訂戶(組件)的更改。您不能也不應該在減速器中使用組件。

+0

如果您想要將某些道具傳遞給reducer,請使用動作創建者 –

相關問題