2016-06-08 12 views
8

मुझे यहां कुछ याद आना चाहिए क्योंकि Docs इसे बाहर निकालें जैसे नीचे दिया गया कोड ठीक काम करना चाहिए लेकिन मुझे एक अवैध कीपैथ त्रुटि मिलती है ... चेक this codepenImmutable.js क्यों फेंकता है Map.setIn पर अमान्य कुंजी पथ()

var map1 = Immutable.Map({ 'selector': { 'type': 'bar' }}); 
var map2 = map1.setIn(['selector', 'type'], 'foo'); 
console.log(map2.toJS()); 

उत्तर

13

ऐसा इसलिए होता है क्योंकि कुंजी 'selector' में एक गैर-मानचित्र मान है। setIn अगर हम यह सुनिश्चित करें कि 'selector' के लिए मूल्य भी एक अपरिवर्तनीय मानचित्र है काम करेंगे:

var map1 = Immutable.Map({ 'selector': Immutable.Map({ 'type': 'bar' })}); 
 
var map2 = map1.setIn(['selector', 'type'], 'foo'); 
 
console.log(map1.toJS()); 
 
console.log(map2.toJS());
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>

गहरा मैप्स और सूचियाँ आप fromJS() उपयोग कर सकते हैं के लिए जावास्क्रिप्ट वस्तुओं और सरणी परिवर्तित करने के लिए। तो अगर आप और अधिक आसानी से लिख सकते हैं:

var map3 = Immutable.fromJS({ 'selector': { 'type': 'bar' }}); 
 
var map4 = map3.setIn(['selector', 'type'], 'foo'); 
 
console.log(map3.toJS()); 
 
console.log(map4.toJS());
<script src="https://cdnjs.cloudflare.com/ajax/libs/immutable/3.8.1/immutable.js"></script>

+0

तो अगर मैं एक गहरी नेस्ट उद्देश्य यह है कि मैं करने के लिए मैं रिकर्सिवली मैन्युअल घोंसले के हर स्तर के नक्शे के लिए है परिवर्तन करना चाहते हैं नहीं है? यह थोड़ा, अच्छा, बोझिल tbh लगता है। – hally9k

+0

वह चित्रण के लिए था। आप मैप्स और सूचियों में जावास्क्रिप्ट ऑब्जेक्ट्स और Arrays को गहराई से परिवर्तित करने के लिए ['सेजेएस()'] (https://facebook.github.io/immutable-js/docs/#/fromJS) का उपयोग कर सकते हैं। – 1983

संबंधित मुद्दे