【发布时间】:2015-11-16 05:11:36
【问题描述】:
与 Redux 的 ToDo 示例类似,我的项目结构也类似 - 只是一个包含要显示的子组件数组的容器。商店将如下所示:
{
workspace: {
widgets: [1, 2, 3]
}
widgets: {
1: {
id: 1,
title: 'First Widget',
lastPrice: 123.324,
lastUpdate: '2015-11-12'
},
2: {
id: 2,
title: 'Second Widget',
lastPrice: 1.624,
lastUpdate: '2015-11-12'
},
3: {
id: 3,
title: 'Third Widget',
lastPrice: 4.345,
lastUpdate: '2015-11-12'
}
}
}
每个小部件项本身就是一个复杂的组件——许多可能的操作、许多属性和许多子哑组件。因此,我将每个小部件都做成了一个连接的智能组件,并带有一个专用的 WidgetReducer 以将这些状态更改分开。
我希望 WidgetReducer 一次只关注一个小部件,因此它处理的状态将只是一个小部件节点,例如:
{ id: 3,
title: 'Third Widget',
lastPrice: 4.345,
lastUpdate: '2015-11-12'
}
My Workspace 组件目前遍历所有 Widget,将 Widget ID 传递给每个 Widget 智能组件:
@connect(state => ({ workspace: state.workspace }))
export default class Workspace extends React.Component {
render() {
return (
<div>
{this.props.workspace.widgets.map(id =>
(<Widget key={id} widgetId={id} />)
)}
</div>
);
}
}
我的 Widget 组件是这样的:
@connect((state, ownProps) => ({ widget: state.widgets[ownProps.widgetId]}))
export default class Widget extends React.Component {
componentWillMount() {
this.props.dispatch(subscribeToUpdates(this.props.widgetId));
}
render() {
return (
<div>
<header>{this.props.widget.title}</header>
<div> /* Other widget stuff goes here */</div>
</div>
);
}
}
如何连接每个 Widget 组件,使其仅接收其自己的 Widget 对象的状态更新,而连接的 Widget Reducer 只关注单个 Widget 对象,而不是它们的集合?
【问题讨论】:
-
您能再详细说明一下吗? reducer 不接收状态,只接收动作。你的问题有点模棱两可......你可以调度一个动作,它的属性包含你需要的数据片段......不确定这是否是你想要的。
-
我试图澄清...如果仍然不清楚,请告诉我!谢谢。
-
@Seneca 只是想指出,reducer 是一个纯函数,它接受一个状态和一个动作并吐出一个新状态。 github.com/rackt/redux#the-gist
标签: javascript reactjs redux