어레이 내의 오브젝트 중 하나를 불변으로 갱신합니다.
리액트에서는요. 주(州)는formErrors
다음과 같은 동적 개체 배열을 포함합니다.
[
{fieldName: 'title', valid: false},
{fieldName: 'description', valid: true},
{fieldName: 'cityId', valid: false},
{fieldName: 'hostDescription', valid: false},
]
예를 들어 fieldName을 가진 상태의 개체를 업데이트해야 합니다.cityId
유효가치로true
.
이 문제를 해결하는 가장 쉬운 방법 또는 가장 일반적인 방법은 무엇입니까?
불변성, 불변성 js 등 어떤 라이브러리도 사용할 수 있습니다.나는 이것을 4시간 넘게 검색해 보았지만 아직도 이해할 수 없다.도와주시면 대단히 감사하겠습니다.
사용할 수 있습니다.map
데이터를 반복하여 fieldName을 확인하려면 fieldName이 cityId이면 값을 변경하고 그렇지 않으면 새 개체를 반환해야 합니다.return
똑같다object
.
다음과 같이 적습니다.
var data = [
{fieldName: 'title', valid: false},
{fieldName: 'description', valid: true},
{fieldName: 'cityId', valid: false},
{fieldName: 'hostDescription', valid: false},
]
var newData = data.map(el => {
if(el.fieldName == 'cityId')
return Object.assign({}, el, {valid:true})
return el
});
this.setState({ data: newData });
예를 들어 ES6의 예를 나타냅니다.
왼쪽이 코드이고 오른쪽이 출력입니다.
아래 코드는 다음과 같습니다.
const data = [
{ fieldName: 'title', valid: false },
{ fieldName: 'description', valid: true },
{ fieldName: 'cityId', valid: false }, // old data
{ fieldName: 'hostDescription', valid: false },
]
const newData = data.map(obj => {
if(obj.fieldName === 'cityId') // check if fieldName equals to cityId
return {
...obj,
valid: true,
description: 'You can also add more values here' // Example of data extra fields
}
return obj
});
const result = { data: newData };
console.log(result);
this.setState({ data: newData });
이게 도움이 되길 바라, 해피 코딩!
불변의 도움은 어떻습니까?아주 잘 작동한다.고객님이 찾고 있는 것은$merge
명령하는 것 같아요.
@FellowStranger:redux 상태 중 객체 배열이 하나(및 하나)만 있습니다.리듀서의 인덱스를 사용하여 올바른 엔트리를 업데이트합니다.
case EMIT_DATA_TYPE_SELECT_CHANGE:
return state.map( (sigmap, index) => {
if ( index !== action.payload.index ) {
return sigmap;
} else {
return update(sigmap, {$merge: {
data_type: action.payload.value
}})
}
})
솔직히, 이건 좀 느끼하고, 내 주 목표의 그 부분을 바꾸려고 하는데, 효과가 있어...리덕스를 사용하는 것처럼 들리지는 않지만 전술은 비슷해야 합니다.
값을 배열에 저장하는 대신 개체를 사용하여 업데이트하려는 요소를 쉽게 지정할 수 있습니다.다음 예제에서는 키가 fieldName이지만 원하는 식별자를 지정할 수 있습니다.
var fields = {
title: {
valid: false
},
description: {
valid: true
}
}
그러면 불변성-변성-변성-변성-변성-변성-변성-update
기능:
var newFields = update(fields, {title: {valid: {$set: true}}})
언급URL : https://stackoverflow.com/questions/43792457/update-one-of-the-objects-in-array-in-an-immutable-way
'programing' 카테고리의 다른 글
ReactJS 부트스트랩네바 및 라우팅이 함께 동작하지 않음 (0) | 2023.02.25 |
---|---|
Angular - ng-repeat 순서를 만들 수 없습니다.작업별 (0) | 2023.02.25 |
AngularJS를 사용하여 url 인코딩 앵커링크를 생성하는 방법 (0) | 2023.02.25 |
Spring Batch에서 ItemReader에서 작업 매개변수에 액세스하는 방법은 무엇입니까? (0) | 2023.02.25 |
로그인 후 Spring Boot의 H2 콘솔에 공백 화면이 표시되는 이유는 무엇입니까? (0) | 2023.02.25 |