我有一個動態的屬性列表,我試圖用來爲列表中的每個對象實例化一個React組件。render()中的connect()?
這裏是我的mapStateToProps()
和mapDispatchToProps()
的簡化版本:
export function mapStateToProps(id) {
return function(state) {
return state.widgets.find((widget) => id === widget.id);
};
}
export function mapDispatchToProps(id) {
return function (dispatch) {
return {
fetchData: (path, props) => dispatch(fetchData(id, path, props)),
};
};
};
然後在父組件:
render() {
const widgets = this.props.widgets.map((widget) => {
return connect(
mapStateToProps(id),
mapDispatchToProps(id),
)(Widget);
});
return <div>{ widgets }</div>;
}
它不拋出任何異常,但它不叫mapStateToProps()
或mapDispatchToProps()
。
我到目前爲止唯一的猜測是connect()
需要早些時候調用,但我不知道如何使用動態列表道具做到這一點。任何人有任何想法如何使這項工作?
你想在這裏實現什麼?你爲什麼不把通過'props.widgets'獲得的道具傳遞給一堆'Widget'組件? .e.g'return
小部件組件設置爲[容器組件](http://redux.js.org/docs/basics/UsageWithReact.html),因爲它們派發操作並觸發狀態更新。我可以看到你的建議將如何取代'mapStateToProps',但它對於'mapDispatchToProps'如何工作? – erock
我同意@thedude,你可以將'fetchData'綁定到父組件,並將該函數作爲屬性傳遞給每個組件' ',完成!不需要在'render'方法內使用連接。 –
Crysfel