유형 오류: 유형 스크립트에서 개체 '[objectArray]'의 읽기 전용 속성 '0'을(를) 할당할 수 없습니다.
저는 angular 8 작업을 하고 있습니다.
- 표를 표시하는 페이지가 있습니다.테이블에 개체 배열의 데이터가 표시됩니다.
taskList
구성 요소가 얻는 것.@Input()
. - 저는 이 테이블의 열에 정렬 기능이 있습니다.
- 각 행에는 삭제 옵션도 있습니다.내가 delete 옵션을 클릭하면 행을 삭제하기 위해 api 호출을 하고 다음으로 다른 호출을 합니다.
tasklist
배열. 이것은 동일한 것에 대한 효과입니다.
@Effect()
DeleteTask$: Observable<Action> = this.actions$.pipe(
ofType(importActions.DELETE_TASK),
switchMap(params =>
this.globalService
.deleteTask(params)
.mergeMap(deleteSuccess => {
return from([
new importActions.DeleteTaskSuccess(deleteSuccess),
new importActions.LoadTaskList(),
]);
})
.catch((error, caught) => {
return Observable.of(new GlobalError(error));
}),
),
);
제 문제는 첫 페이지 로드 시 정렬 기능이 잘 작동한다는 것입니다.그러나 행을 삭제한 다음 작업 목록을 사후 삭제 후 가져오면 다음 오류가 발생합니다.
ERROR Error: Uncaught (in promise): TypeError: Cannot assign to read only property '0' of object '[object Array]'
TypeError: Cannot assign to read only property '0' of object '[object Array]'
오류 메시지에 따르면 내 코드의 다음 함수는 오류를 제공합니다.
exchange(a, b) {
const temp = this.taskList[a];
this.taskList[a] = this.taskList[b]; //this line gives error
this.taskList[b] = temp;
}
이 함수는 다음을 사용하는 정렬 코드의 일부입니다.tasklist
배열하고 정렬합니다.
흐름은ngOnchanges(detects change is taskList array) calls --> this.taskChange('export_name', 'asc') based on some condition calls --> this. exchange(a, b)
다음은 myngOnchanges 메서드입니다.
ngOnChanges(changes: SimpleChanges) {
if (this.taskList !== null && this.taskList !== undefined) {
this.taskChange('export_name', 'asc');
}
}
다음은 주요 정렬 방법입니다.
async taskChange(value, taskOrder) {
this.sortOrder = taskOrder;
this.selectedValue = value;
const expr = {
asc: (a, b) => a > b,
desc: (a, b) => a < b,
};
for (let i = 0; i < this.taskList.length; i++) {
for (let j = i + 1; j < this.taskList.length; j++) {
switch (value) {
case 'export_name':
if (
expr[this.sortOrder](this.taskList[i].name, this.taskList[j].name)
) {
this.exchange(i, j);
}
break;
case 'file_type':
let type1;
let type2;
type1 = this.exportType.transform(this.taskList[i].code, []);
type2 = this.exportType.transform(this.taskList[j].code, []);
if (expr[this.sortOrder](type1, type2)) {
this.exchange(i, j);
}
break;
}
}
}
}
어레이가 두 번째로 변경될 때 정확하게 무엇이 이 오류를 유발하는지 모르겠습니다.저는 여러 가지를 시도해 보았지만 아무 것도 효과가 없었습니다.온라인에서 확인한 바로는 @Input로 수신된 배열을 변형하려고 하기 때문에 이러한 현상이 발생할 수 있습니다.그러나 '태스크리스트' 배열을 변형시키는 위의 코드는 초기 페이지 로드에서 작동합니다.그리고 배열이 변경될 때만 작동을 중지합니다.누가 저 좀 도와주실 수 있나요?
배열을 정렬하기 전에 배열의 복사본을 만들어 보십시오.스프레드 연산자를 사용하는 것과 같습니다.
arrayForSort = [...this.taskList]
그런 다음 정렬 후에 다시 할당할 수 있습니다.taskList
들판
React/Redux를 사용하여 이 오류 메시지와 함께 이 문제가 발생하는 경우 허용되지 않는 상태를 직접 변환하려고 할 수 있습니다.
저의 경우 thunk 내에서 상태를 얻기 위한 설정이 있었습니다(간단하게).
import store from "./myStore";
const state = store.getState();
const getItems = state => state.user.items;
const items = getItems(state);
// ↓ this blew up as it was attempting to manipulate `state`
items.sort((a, b) => a.order - b.order);
이 문제는 다음과 같이 해결되었습니다.
import store from "./myStore";
const state = store.getState();
const getItems = state => state.user.items;
// ↓ in my case items is an array, so I create a new array by spreading state here
const items = [...getItems(state)];
// ↓ which means we're not manipulating state, but just our `items` array alone
items.sort((a, b) => a.order - b.order);
작업 중에 이 정확한 오류가 발생했습니다.nextjs
프로젝트.내가 넣었습니다.findIndex
개체 배열에서 이 오류가 발생했을 때 배열의 특정 개체에 새 키-값 쌍을 추가하려고 했습니다. 그래서 다음 작업을 수행했습니다.
const arrayOfObjects = [...someOtheObj.originalArrayKey]
const index = arrayOfObjects.findIndex((obj)=>{
// I had some conditions here
})
arrayOfObjects[index] = newValue
맞아요.
const arrayOfObjects = [...someOtheObj.originalArrayKey]
틀렸어
const arrayOfObjects = someOtheObj.originalArrayKey
언급URL : https://stackoverflow.com/questions/64957735/typeerror-cannot-assign-to-read-only-property-0-of-object-object-array-in
'programing' 카테고리의 다른 글
PowerShell을 사용하여 선언 시 사전 초기화 (0) | 2023.08.01 |
---|---|
인식할 수 없는 구성 섹션 log4net (0) | 2023.08.01 |
Flask Python, 목록을 반환하거나 Ajax 호출에 받아쓰려고 합니다. (0) | 2023.07.27 |
GENERATE ALVERS 쿼리의 from_unixtime에 대한 대안 (0) | 2023.07.27 |
파워셸을 사용하여 CRLF 교체 (0) | 2023.07.27 |