2017-11-03 2 views
0

私は次のリストから新しいリストを返そうとしていますが、以下に示すエラーが発生し続けます。何かご意見は?このエラーで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-throw-invalid-key-path-on-map-setin) –

答えて

-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' 
関連する問題