Javascript 如何使用setState拼接到状态为的数组中?
My state.events位于由组件实例EventContainer组成的数组中 我希望我的setState在state.events数组中放置一个新的EventContainer。但是,我希望EventContainer在发出setState调用的特定EventContainer之后立即进入索引 我正在寻求帮助,以便对我的方法进行必要的调整,或者,如果我的整个方法都不好,那么就如何进行这项工作提出建议。多谢各位 我正在开发一个由行/事件容器组成的行程生成器,这些行/事件容器表示给定日期的活动 每个EventContainer都有一个按钮,该按钮需要为用户提供在该EventContainer之后立即单击另一行的功能Javascript 如何使用setState拼接到状态为的数组中?,javascript,arrays,reactjs,setstate,Javascript,Arrays,Reactjs,Setstate,My state.events位于由组件实例EventContainer组成的数组中 我希望我的setState在state.events数组中放置一个新的EventContainer。但是,我希望EventContainer在发出setState调用的特定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>
</>
)
}
}
类DayContainer扩展React.Component{
建造师(道具){
超级(道具);
此.state={
事件:[],
};
this.pushNewEventContainerState=this.pushNewEventContainerState.bind(this);
}
PushNewEventContainerState(索引){
设newEvent=;
this.setState(prevState=>{
const events=prevState.events.map((项,j)=>{
如果(j==索引){
事件:[…prevState.events.splice(索引,0,newEvent)]
}
})
})
}
render(){
返回(
{
this.state.events==null
?
:
}
{this.state.events.map((项,索引)=>(
-
this.pushNewEventContainerState(索引)}
>{item}
))}
)
}
}
我在setState中的目标是在索引(PushNewEventContainerState函数中的参数)之后立即将newEvent拼接到this.state.events中
我得到了这个错误,但我猜不仅仅是这样:第23:22行:预期是赋值或函数调用,而是看到了一个表达式没有未使用的表达式。我可以看到代码中至少有两个问题。 -拼接将在适当位置对阵列进行变异 -您没有返回更新的状态 您可以改为使用
slice
构建新阵列
pushNewEventContainerState(索引){
让newEvent= ;
this.setState(prevState=>{
const updateEvents=[…prevState.events.slice(0,索引),newEvent,…prevState.events.slice(索引+1];
返回{
事件:UpdateEvents
})
})
}
由于我对编码相当陌生,我花了一段时间,但我能够编译出完整的答案。下面是代码。下面,我逐一解释问题所在,以及更新后的代码是如何解决的
class DayContainer extends React.Component {
constructor(props){
super(props);
this.state = {
events: [{key:0}],
};
this.pushNewEventContainerToState = this.pushNewEventContainerToState.bind(this);
}
pushNewEventContainerToState(index) {
let newEvent = {key: this.state.events.length};
this.setState(prevState => {
let updatedEvents = [...prevState.events.slice(0, index + 1), newEvent, ...prevState.events.slice(index + 1)];
return {
events: updatedEvents
};
})
}
render(){
return (
<>
<div>
<ul>
{this.state.events.map((item, index) => (
<li key={item.key}>
< EventContainer pushNewEventContainerToState={() => this.pushNewEventContainerToState(index) } / >
</li>
))}
</ul>
</div>
</>
)
}
}
类DayContainer扩展React.Component{
建造师(道具){
超级(道具);
此.state={
事件:[{key:0}],
};
this.pushNewEventContainerState=this.pushNewEventContainerState.bind(this);
}
PushNewEventContainerState(索引){
让newEvent={key:this.state.events.length};
this.setState(prevState=>{
让UpdateEvents=[…prevState.events.slice(0,索引+1),newEvent,…prevState.events.slice(索引+1)];
返回{
事件:UpdateEvents
};
})
}
render(){
返回(
{this.state.events.map((项,索引)=>(
-
this.pushNewEventContainerState(index)}/>
))}
)
}
}
设置
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>
</>
)
}
}
所有这些都让我解决了我面临的一个大问题:我需要将最新的EventContainer放在调用PushNewEventContainerState的EventContainer索引之后的索引中。发生这种情况的主要原因是我没有正确地将索引传递到render()中的EventContainer.现在我已经有了实际的EventContainer,我可以以正确的方式传递它一个道具(请在render中参考EventContainer的道具)现在我用正确的索引调用PuxEngEngEngulttoToCurror。< /P>不应该在SETSTATE回调函数中添加返回语句吗?也可以考虑使用切片而不是剪接。将尝试切片。因此,如果在事件之前添加返回,则会出现一个错误,表示它期望在分号之后使用分号。events@VictorFranco如果答案有帮助如果您解决了发布的问题,请将其标记为答案,以便对其他人也有帮助。对不起,我是这里的新手。完成!