我的state.events是由组件实例EventContainer组成的数组。
我想让setState在state.events数组中放置一个新的EventContainer。但是,我希望EventContainer在进行setState调用的特定EventContainer之后立即进入索引。
我正在寻求帮助,以对我的方法进行必要的调整,或者,如果我的整个方法都不好,则建议如何进行此调整。非常感谢你。
我正在开发一个由行/ EventContainers组成的路线生成器,这些行/事件容器表示给定一天的 Activity 。
每个EventContainer都有一个按钮,需要使用户能够在该EventContainer之后立即单击另一行。
class DayContainer extends React.Component {
constructor(props){
super(props);
this.state = {
events: [],
};
this.pushNewEventContainerToState = this.pushNewEventContainerToState.bind(this);
}
pushNewEventContainerToState (index){
let newEvent = <EventContainer />;
this.setState(prevState => {
const events = prevState.events.map((item, j) => {
if (j === index) {
events: [...prevState.events.splice(index, 0, newEvent)]
}
})
})
}
render(){
return (
<>
<div>
<ul>
{
this.state.events === null
? <EventContainer pushNewEventContainerToState= .
{this.pushNewEventContainerToState} />
: <NewEventButton pushNewEventContainerToState={this.pushNewEventContainerToState} />
}
{this.state.events.map((item, index) => (
<li
key={item}
onClick={() =>
this.pushNewEventContainerToState(index)}
>{item}</li>
))}
</ul>
</div>
</>
)
}
}
我在setState中的目标是在索引(pushNewEventContainerToState函数中的参数)之后立即将newEvent拼接到this.state.events中。
我遇到了这个错误,但是我猜想还有更多的事情要做:第23:22行:希望有一个赋值或函数调用,而是看到了一个表达式no-unused-expressions。
最佳答案
我可以看到至少两个代码问题。
-拼接将改变阵列的位置
-您不返回更新状态。
您可以改为使用slice
构建新数组。
pushNewEventContainerToState(index) {
let newEvent = < EventContainer / > ;
this.setState(prevState => {
const updatedEvents = [...prevState.events.slice(0, index], newEvent, ...prevState.events.slice(index + 1];
return {
events: updatedEvents
})
})
}
关于javascript - 如何使用setState拼接成状态数组?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/58513558/