我有一种格式,要求用户输入几个字段的字段值,将字段值存储在状态中,并以自定义格式显示状态值。
因此,我有几个输入字段和一个提交按钮:
<button onClick={this.handleSubmit}>Submit</button>
{
this.state.credentials &&
//<Credentials value={this.state}/>
<Credentials value={JSON.stringify(this.state, undefined, 2)} />
}
Credentials函数以JSON格式转换组件的状态:
const Credentials = ({value} ) => {
return <pre>{formatState(value)}</pre>;
}
formatState函数基本上将操纵状态值并以我想要的方式显示它们:
function formatState(state) {
console.log("hi")
console.log(state);
const output = state.groups.reduce((final, s)=> {
console.log(output)
const values = Object.keys(s).reduce((out, o)=> {
out[o] = s[o].map(k => Object.values(k))
return out;
}, {})
final = {...final, ...values}
return final;
}, {})
console.log(output)
}
状态如下:
{
"groups": [
{
"typeA": [
{
"name": "abc"
},
{
"number": "13,14"
}
],
"typeB": [
{
"country": "xyz"
},
{
"date1": "2019-05-14"
}
]
}
]
}
但是我想要这样的输出:
groups: {
"typeA": [[abc],[13,14]],
"typeB": [[2019-05-14],[xyz]]
}
SO,reduce函数用于将状态转换为以下输出。但是我得到了错误: “ TypeError:无法读取未定义的属性'reduce'”
请任何人告诉我为什么会这样。
答案 0 :(得分:1)
错误在这里<Credentials value={JSON.stringify(this.state, undefined, 2)} />
。 JSON.stringify
生成某个对象的字符串表示形式(在您的情况下为this.state
)。 state
的参数formatState
具有字符串类型。看来您想让state
成为对象。因此,您应该
<Credentials value={this.state} />