2016-08-02 2 views
3
내 구조를 업데이트하려고 '잘못된 키 패스'오류 받고 있어요

:불변 JS 업데이트를 심층 구조

이를 사용하여,

state = fromJS({ 
    cmsData: { 
    "pages": [ 
     { 
     "name": "page1", 
     "content": { 
      "header": "Example header", 
      "intro": "Example intro", 
      "body": "Example body", 
     } 
     } 
     ... 
} 

내가 페이지 배열의 값을 업데이트하기 위해 노력하고있어를

state.setIn(['cmsData', 'pages', index, 'content', title], value) 

index는 숫자이며, title은 문자열이며 value는 문자열입니다.

나는 수행하여 대신 새 항목을 만들 수 있습니다

state.setIn(['pages', index, 'content', title], value) 

을하지만 바로 그때 나는 오류가 발생하는 주요 'cmsData'개체에 액세스하려고한다.

------ UPDATE ------

내가 대상이있는 경우 내가 처음 cmsData 객체를 설정하고있어보다는 초기 상태

state.set('cmsData', data) 

인 초기 상태로, 그것은 잘 작동합니다. 그러나이 설정되어있어 이후 업데이트하려고하면 잘못된 키 패스를 대신 초기 데이터를 설정하는

, 나는 일 mergeDeep을 사용 -----

----- 솔루션을 생산!

state.mergeDeep({ 'cmsData': data }) 

답변

0

다시 확인해 주시겠습니까? 귀하의 코드를 시도하고 잘 작동하는 것 같습니다.

var state = Immutable.fromJS({ 
    cmsData: { 
    "pages": [ 
     { 
     "name": "page1", 
     "content": { 
      "header": "Example header", 
      "intro": "Example intro", 
      "body": "Example body", 
     } 
    } 
    ] 
}}); 

방금이 명령문을 실행하고 예상 개체를 반환했습니다. 여기

는 새 항목을 작성 안에서 설정했는지가 cmsData 수준을 생략하다 보인다 link to jsbin

+0

자세한 내용은 업데이트를 참조하십시오! 사실 그 개체를 초기 상태로 업데이트하는 대신 cmsData 개체를 업데이트하려고합니다. 매우 명확하지 않은 사과! – Boyswan

0

입니다. 왜 그것이 다른 액세스에 영향을 미칠지는 모르지만 생각한 것을 만들지 않았을 수 있습니다. 따라서 해당 키 패스에 항목이 없으면 오류가 발생합니다 (예 : cmsData 내).

0

초기 데이터, 내가 일한 mergeDeep 사용!

state.mergeDeep({ 'cmsData': data })