我已經使用Redux幾個星期了,我對它很滿意,而且我已經習慣了Redux方式。我正在使用它與React。由於這兩件事對我來說都是新的,所以還有很多東西要學。通過道具向下傳遞動作
我有一個問題 - 也許我做錯了什麼?讓我告訴你:
我有一個組件結構,看起來像這樣:
App //root of the application aka smart component
CampaignTable
CampaignHeaderRow
CampaignHeader
CampaignDataRow
CampaignData
應用程序組件被初始化作爲(僅相關代碼):
import * as DashboardActions from '../actions.js'
function select(state){
return {
campaigns: state.campaigns, // array of campaign objects, has name, id, time created etc
order: state.order // sort format "byWhichField"
// will affect the way how campaigns are displayed
}
}
function mapDispatchToProps(dispatch){
return bindActionCreators(DashboardActions, dispatch)
}
export default connect(select, mapDispatchToProps)(App);
應用程序現在可以訪問狀態和所有動作作爲道具。
我現在用它看到的問題是:
我想CampaignHeader火,這將改變state.order狀態的動作。假設我會在內部製作<th>Text</th>
CampaignHeader clickable。這將觸發此行爲,以更改state.order這將影響下一次移交時的廣告訂單。
所以我有我的動作App道具。將它傳遞到 CampaignHeader我會:
- 傳下來CampaignHeader道具
- 將其分配到變量中CampaignHeader並傳遞下來的道具CampaignHeaderRow
- 將其分配給CampaignHeaderRow中的變量並將其作爲道具傳遞給CampaignHeader
- 將其分配到變量中CampaignHeader,並觸發onClick事件中的作用....
這是很多樣板,作業和包傳球!只是爲了開始行動。
沿途的所有組件都知道此操作。
當我決定實現此功能時,我打開了CampaignHeader組件文件。我添加了邏輯並調用了動作,我已將動作添加到動作文件中。我需要的只是獲得一套道具。 CampaignHeader組件不包含對其父項的引用,所以我不知道該道具從哪裏注入(在這個例子中顯而易見,但我希望你能得到一個觀點)。
如果我的組件結構更深,該怎麼辦?
該方法是否正確?
我可以解決這個問題嗎?
UPDATE:
由於@Errorpro建議會是OK連接單動和state.order到CampaignHeader?
擔心:如果我會做到這一點,我會一直這樣做。
但路過的父親是我的問題,我必須做4次在我的簡單的例子。我知道流程工作如何以這種方式發現它很奇怪 – Kocur4d
在react.js中,只有一種正確的方法可以將它進一步傳遞 - 道具。如果你使用redux連接你的方式沒問題。如果你需要在最終的失敗中獲得這個動作,你可以在那裏使用智能組件,並在那裏調用你的動作。在你的情況下,將很好創建CampaignHeaderContainer,並在那裏連接調度和操作。正如我的例子。 – Errorpro
所以你建議添加另一個連接到** CampaignHeaderRow **? – Kocur4d