IT이야기

Immutable.js 레코드에서 한 번에 여러 필드를 설정하는 방법

cyworld 2021. 5. 2. 10:58
반응형

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});

참조 URL : https://stackoverflow.com/questions/31664994/how-to-set-multiple-fields-at-once-in-immutable-js-record

반응형