TypeError:无法读取react中未定义的属性'reduce'

时间:2019-05-15 03:34:00

标签: json reactjs state reduce

我有一种格式,要求用户输入几个字段的字段值,将字段值存储在状态中,并以自定义格式显示状态值。

因此,我有几个输入字段和一个提交按钮:

<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'”

请任何人告诉我为什么会这样。

1 个答案:

答案 0 :(得分:1)

错误在这里<Credentials value={JSON.stringify(this.state, undefined, 2)} />JSON.stringify生成某个对象的字符串表示形式(在您的情况下为this.state)。 state的参数formatState具有字符串类型。看来您想让state成为对象。因此,您应该

<Credentials value={this.state} />