【发布时间】:2016-02-04 19:09:36
【问题描述】:
我已经使用 Redux 几个星期了,我对它非常满意,而且我已经习惯了 Redux 的方式。我将它与 React 一起使用。仍然有很多东西要学,因为这两件事对我来说都是新的。
我有一个问题 - 也许我做错了什么......让我告诉你:
我的组件结构如下所示:
App //root of the application aka smart component
CampaignTable
CampaignHeaderRow
CampaignHeader
CampaignDataRow
CampaignData
App组件初始化为(仅相关代码):
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 状态的操作。假设我会让 CampaignHeader 内的<th>Text</th> 可点击。这将触发更改 state.order 的操作,进而影响下一次重新呈现时的广告系列顺序。
所以我在 App 道具中可以使用我的操作。将其传递给 CampaignHeader 我必须:
- 将其作为道具传递给 CampaignHeader
- 将其分配给 CampaignHeader 内的变量,并将其作为道具传递给 CampaignHeaderRow
- 将其分配给 CampaignHeaderRow 内的变量,并将其作为道具传递给 CampaignHeader
- 将其分配给 CampaignHeader 中的变量并在 onClick 事件中触发操作....
这是很多样板文件、作业和包传递!只是为了触发行动。
沿途的所有组件都知道这个动作。
当我决定实现这个功能时,我打开了 CampaignHeader 组件文件。我已经添加了逻辑并调用了动作,我已经将动作添加到动作文件中。我所需要的只是获得一套道具。 CampaignHeader 组件不包含对其父级的引用,所以我不知道应该从哪里注入这个道具(在这个例子中很明显,但我希望你明白)。
如果我有更深的组件结构会怎样?
这种方法正确吗?
我可以用不同的方式解决这个问题吗?
更新:
正如@Errorpro 建议的那样,将 single action 和 state.order 连接到 CampaignHeader 是否可以?
担心:如果我会做一次,我会一直做。
【问题讨论】: