Javascript JS减少问题

Javascript JS减少问题,javascript,reactjs,ecmascript-6,Javascript,Reactjs,Ecmascript 6,我在react组件中有以下方法: addWidget = (index) => { let endX = this.state.widgets.reduce((endX, w) => endX.w + w.w, 0) console.log(endX); if (endX === 12) endX = 0 this.setState({ widgets: this.state.widgets.concat({ ..

我在react组件中有以下方法:

  addWidget = (index) => {
    let endX = this.state.widgets.reduce((endX, w) => endX.w + w.w, 0)

    console.log(endX);

    if (endX === 12) endX = 0

    this.setState({
      widgets: this.state.widgets.concat({
        ...this.state.availableWidgets[index],
        i: uuid(),
        x: endX,
        y: Infinity,
      })
    })
  }
“addWidget”位于render方法中,如下所示:

  render() {
    const { widgets } = this.state

    return (
      <div>
        <Button type="secondary" onClick={() => this.addWidget(0)}>Add small</Button>
        <Button type="secondary" onClick={() => this.addWidget(1)}>Add large</Button>
        <Dashboard 
          widgets={widgets} 
          onLayoutChange={this.onLayoutChange} 
          renderWidget={this.renderWidget} />
      </div>
    )
...

  state = {
    widgets: [],
    availableWidgets: [
      {
        type: 'compliance-stats',
        config: {

        },
        w: 1,
        h: 1,
      },
      {
        type: 'compliance-stats',
        config: {

        },
        w: 3,
        h: 2,
      }
    ]
  }
...
首先,“this.state.widgets”是一个空数组,单击concat方法填充它。 endX的第一个值为0;然而在那之后,我得到了楠


您正在设置as
0的初始值
但你把它当作一个物体:

endX.w + w.w
这就像做:

0.w + w.w
这实际上可以做到:

undefined + w.w
这将产生
NaN

尝试将其更改为:

let endX = this.state.widgets.reduce((endX, w) => endX + w.w, 0)

起始值为0,但引用了未定义的
endX.w
,因此添加将产生
NaN


让起始值为
{w:0}

如果初始值为
0
,则此:
endX.w
类似于键入
0.w