Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/angular/29.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/ssh/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Angular 复制阵列不工作时的ngxs扩展运算符_Angular_Ngxs - Fatal编程技术网

Angular 复制阵列不工作时的ngxs扩展运算符

Angular 复制阵列不工作时的ngxs扩展运算符,angular,ngxs,Angular,Ngxs,我试图在我的状态中只复制数组属性的值,但我没有让它按预期工作。调用patchState方法时,应该更新状态,而不是不调用它。我做错了什么 @Action(PostAttachment) postAttachment(ctx: StateContext<EditEntityStateModel>, { preview, selectedEntityId }: PostAttachment) { ctx.patchState({ currentlyUploading: tru

我试图在我的状态中只复制数组属性的值,但我没有让它按预期工作。调用
patchState
方法时,应该更新状态,而不是不调用它。我做错了什么

@Action(PostAttachment)
  postAttachment(ctx: StateContext<EditEntityStateModel>, { preview, selectedEntityId }: PostAttachment) {
    ctx.patchState({ currentlyUploading: true });
    const previews = [...ctx.getState().previews.data];
    console.log(previews);
    const updatedData = previews.map(previewFromMapping => {
      if (previewFromMapping.filename === preview.filename) {
        previewFromMapping.status = 'uploading';
      }
      return singleData;
    })
    console.log('new', updatedData);
    ctx.patchState({ previews: { ...ctx.getState().previews, data: updatedData }});
  }
@操作(后附加)
postAttachment(ctx:StateContext,{preview,selectedEntityId}:postAttachment){
patchState({currentlyUploading:true});
const previews=[…ctx.getState().previews.data];
console.log(预览);
const updatedata=previews.map(previewFromMapping=>{
if(previewFromMapping.filename==preview.filename){
previewFromMapping.status='正在上载';
}
返回数据;
})
console.log('new',updatedata);
patchState({previews:{…ctx.getState().previews,data:updatedata}});
}

因此,第二个和第一个
console.log()
是相同的,但它们不应该相同。它们都显示完全相同的输出。所以我猜,我不小心复制了给定数组的状态引用,而不是值本身但是为什么呢?

我仍然不清楚您遗漏了什么或希望发生什么,但我已经清理了您的代码,并对您打算发生什么做了最好的猜测(如果提供了更多详细信息,我将更新答案):

//开始:打字
类预览数据{
文件名:字符串
}
课堂预习{
数据:PreviewData[]
}
类EditEntityStateModel{
预览:预览;
当前上传:布尔;
}
//完:打字
//开始:行动
类别邮资附加{
静态类型=“[预览]发布附件”
构造函数(公共预览数据:预览数据,公共选择的标题ID){
}
}
//结束:行动
//开始:国家
@行动(附随后)
postAttachment(ctx:StateContext,{previewData}:postAttachment){
const state=ctx.getState();
常量PreviewData:PreviewData[]=[…state.previews.data];
console.log(previewsData);
const UpdateData=previewData.map(数据=>data.filename===previewData.filename?{…数据,状态:“正在上载”}:数据)
//这应该是一个与previewsData长度和数据相同的列表,但具有匹配文件名且状态为“上载”的项目
console.log('new',updatedata);
patchState({currentlyUploading:true,previews:{…state.previews,data:updatedata}});
}
//完:国家
//给定起始状态:
//  {
//预览:{
//数据:[{
//文件名:“你好”,
//状态:'WaitingUpload'
//      }, {
//文件名:“再见”,
//状态:'WaitingUpload'
//      }]
//    },
//当前上载:false
//  }
//派遣行动:
//this.store.dispatch(新的PostAttachment({filename:'Hello'});
//应导致以下状态:
//  {
//预览:{
//数据:[{
//文件名:“你好”,
//状态:“正在上载”
//      }, {
//文件名:“再见”,
//状态:'WaitingUpload'
//      }]
//    },
//当前上传:true
//  }

正在定义的值
singleData
在哪里?