2017-11-03 5 views
0

다음 목록에서 새 List를 반환하려고했지만 아래 오류가 계속 표시됩니다. 이견있는 사람? 이 오류에Immutable.js setIn이 작동하지 않습니다.

export const questions = List([ 
    {uuid: uuid(), order: 0, text: 'Which country do you live in?', choices: [ 
    { choice: 'United States', added: true }, 
    { choice: 'Canada', added: true }, 
    { choice: 'Australia', added: true } 
    ]}, 
    {uuid: uuid(), order: 1, text: 'Which country were you born in?', choices: [ 
    { choice: 'Mexico', added: true }, 
    { choice: 'California', added: true }, 
    { choice: 'Seoul', added: true } 
    ]} 
]); 


questions.setIn([0, 'text'], 'changed') 

결과 :

immutable.js:870 Uncaught Error: invalid keyPath 
    at invariant (immutable.js:870) 
    at updateInDeepMap (immutable.js:1974) 
    at updateInDeepMap (immutable.js:1980) 
    at List.Map.updateIn (immutable.js:1278) 
    at List.Map.setIn (immutable.js:1256) 
    at eval (eval at ./src/reducers/questionsList.js (questionsList.js:17), <anonymous>:1:11) 
+0

([Immutable.js이 Map.setIn()에 잘못된 키 경로를 던져 않는 이유]의 사용 가능한 복제 https://stackoverflow.com : 다음 값을 변경하기 위해 '지정을 정기적으로 팔자를 사용하는 바닐라 개체를 가져/questions/37712871/왜 - 변하지 않는 - js - 던져 - 무효 - 키 - 경로 -지도 - 설정에서) –

답변

-1

시도는 불변의 4.0.0-rc9에서 immutable.js 라이브러리

0

를 업데이트하려면,이 사실은 당신이 원하는해야한다. 3.X에서 setIn은 가장 최근 문서에 따라 깊이 불변의리스트와 함께 일하지만 :

Plain JavaScript Object or Arrays may be nested within an Immutable.js Collection, and setIn() can update those values as well, treating them immutably by creating new copies of those values with the changes applied.


this answer를 참조하십시오.

questions은 바닐라 JS 개체의 불변 목록입니다. List#setIn()은 변경되지 않는 개체에서만 작동합니다. 깊이 불변 인 객체를 얻으려면 questions = Immutable.fromJS(...)을 설정하고 싶을 것입니다. 그러나, 당신이 (난 정말 그렇지 않은 희망 하는) 당신의 불변의 객체의 내부 바닐라 JS 객체를 가하고 있다는 것을 의도적 인 경우

, 당신이 원하는 것 무엇 불변의 사용입니다

questions.get(0)['text'] = 'changed'