Immutable.js 레코드에서 한 번에 여러 필드를 설정하는 방법은 무엇입니까?
이것을 보면 불변이라고 생각합니다. Record는 "javascript immutable objects"를 나타내는 데이터 구조이지만 매번 set을 호출하는 여러 객체를 생성하지 않고 한 번에 여러 필드를 업데이트하고 싶습니다.
이렇게하고 싶어요
class LoginContext extends Immutable.Record(
{ logged : false, loading: false, error: false, user: null}){
}
var loginContext = new LoginContext()
var anotherContext = loginContext.set({'logged':'true', 'error':'false'})
API 일관성을 위해 Record.set ()에 개체를 전달할 수 없다는 것을 읽었습니다 .
이 라이브러리와 ES6 모두에서 세트의 다른 사용과 일관성. Map과 Set의 세트는 객체를 받아 들일 수 없습니다. 왜냐하면 그들의 키는 문자열뿐만 아니라 어떤 것이 든 될 수 있기 때문입니다. 레코드에는 문자열이 있어야하지만 API의 일관성을 유지하는 것이 중요했습니다.
그리고 다음을 사용할 수 있다는 것을 알고 있습니다.
var anotherContext = loginContext.withMutations(function (record) {
record.set('logged','true').set('error','true');
});
다른 방법이 있거나 레코드를 오용하고 있습니까?
개인적으로 나는 병합 구문을 선호하며 더 자연 스럽습니다.
const newContent = oldContext.merge({
"logged": true,
"error": false
});
매우 복잡한 일을하고 있다면 일시적인 버전이 더 좋을 수도 있지만 어디인지 상상할 수 없습니다.
또한 mergeDeep
필요한 경우 활용할 수 있습니다 .
원래 질문에 답하기 위해 .withMutations()
다음은 문서에서 발췌 한 것입니다.
변경 불가능한 새 객체를 생성하기 위해 변형을 적용하면 약간의 오버 헤드가 발생하여 약간의 성능 저하가 발생할 수 있습니다. 반환하기 전에 로컬로 일련의 돌연변이를 적용해야하는 경우, Immutable은 컬렉션의 임시 변경 가능 (일시적) 복사본을 만들고 withMutations를 사용하여 수행 방식으로 돌연변이 배치를 적용 할 수있는 기능을 제공합니다. 사실 이것은 Immutable이 복잡한 돌연변이 자체를 적용하는 방법입니다.
따라서 줄을 따라 무언가를 작성할 수 있습니다.
loginContext.withMutations((ctx) => {
ctx.set('logged', true).set('error', false)
});
그 외에도 레코드는 일반적인 js 점 표기법과 함께 사용할 수 있다고 생각했습니다.
행운을 빕니다!
여러 세트를 연결하지 않는 이유는 무엇입니까? 이렇게 :
ImmutableObj.set('key', 'value')
.set('key2', 'value2')
.set('key3', 'value3');
몇 가지를 다르게해야합니다. 먼저 Immutable.Record를 확장하지 말고 생성자를 사용하십시오.
var LoginContext = Immutable.Record({
logged:false,
loading:false,
user: null
}, 'LoginContext');
그러면 객체로 인스턴스화 할 수있는 클래스가 반환됩니다.
var anotherContext = new LoginContext({logged:true, error:false});
'IT이야기' 카테고리의 다른 글
Swift 매개 변수의 기본 키워드 (0) | 2021.05.02 |
---|---|
console.log.bind (콘솔) (0) | 2021.05.02 |
낮은 디스크 워터 마크 [?? %] 초과 (0) | 2021.05.01 |
애자일 환경에서 대규모 프로젝트에 대한 견적 제공 (0) | 2021.05.01 |
불완전한 유형의 잘못된 사용 (0) | 2021.05.01 |