Javascript JS减少问题
我在react组件中有以下方法: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({ ..
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