【发布时间】:2017-08-16 19:30:26
【问题描述】:
在页面加载时,我正在调用一个元数据 API,它返回一个对象,其中元数据类型作为键名,元数据对象数组作为值,如下所示:
需要简化和更改元数据对象以与我的 React 输入组件很好地配合(每个对象将是一个单独的复选框或带有值和标签的单选按钮)。我基本上需要返回相同的格式,但使用值和标签键而不是 id、display_on、name 等。我在容器组件中执行以下操作,以更改准备好通过 props 传递给表单组件的数据。问题是metadataFormattedForInput 总是返回一个空对象。
function mapStateToProps(state, ownProps) {
const metadataFormattedForInput = {};
Object.keys(state.metadata).forEach((key) => {
const metadataOptions = [];
state.metadata[key].map(option => (
metadataOptions.push({ value: option.id, label: option.name })
));
return (
Object.assign({}, metadataFormattedForInput, {
[key]: metadataOptions,
})
);
});
return {
metadataOptions: metadataFormattedForInput,
};
}
【问题讨论】:
-
你能分享
metadata对象吗..? -
返回
forEach循环真的没有任何作用? -
除了从 forEach 返回之外,为什么还要使用
state.metadata[key].map并丢弃结果数组?使用const metadataOptions = state.metadata[key].map(option => ({ value: option.id, label: option.name }); -
metadataFormattedForInput不会被Object.assign的调用修改。事实上,Object.assign是完全没用的,既不保留第一个参数,也不保留返回值。 -
实际上只需要从 Object.assign 函数中删除空 {},但接受的答案是一种更好的编写方式。