【发布时间】:2019-01-05 06:24:25
【问题描述】:
我在组件的按钮单击和该组件的渲染之间发生了一个奇怪的问题。在按钮单击的处理程序中,我设置了组件的状态。对于其中一个状态值,我将一个空对象压入数组并增加另一个状态值。在渲染时,我添加空对象的状态值变成一个整数。
我在函数 componentWillUpdate 和 componentDidUpdate 中添加了在到达这些函数之前查看状态是否已经改变,并且确实如此。
class ItemGrouping extends React.Component {
constructor(props) {
super(props);
this.state = {
items: this.props.items,
count: this.props.count,
groupingName: this.props.groupingName
};
this.addItem = this.addItem.bind(this);
}
addItem(event) {
event.preventDefault();
this.setState((previousState, previousProps) => {
return {
count: previousState.count + 1,
items: previousState.items.push({}),
groupingName: previousState.groupingName
};
});
}
render() {
let count = this.state.count;
let items = this.state.items.map((item, index) => {
let currentIndex = count;
count += 1;
return (
<EditableItem key={count} item={item} count={currentIndex} />
);
});
return (
<section className="card">
{this.state.groupingName != '' &&
<h3 className="card-header">{this.state.groupingName}</h3>
}
<div className="card-body">
<div className="row item-grouping" data-grouping={this.state.groupingName}>
<div className="col-12">
{items}
</div>
</div>
</div>
<div className="card-footer">
<div className="d-flex justify-content-center">
<button className="btn btn-success" onClick={this.addItem} type="button"><i className="dripicons-plus"></i> Add an Item</button>
</div>
</div>
</section>
);
}
}
初始渲染:
state.count: 1,
state.items: [{id: '', value: ''}]
addItem 后的预期结果:
state.count: 2,
state.items: [{id: '', value: ''}, {}]
addItem 后的实际结果:
state.count: 2,
state.items: 3
子组件会导致状态改变吗?页面上没有会触发该组件状态更改的父组件,所以我有点迷茫。
【问题讨论】:
标签: javascript reactjs