2017-01-07 3 views
1

API에서받은 응답을 정규화하고 싶습니다. 일반적인 응답은 다음과 같습니다.normalizr v3 및 JSON api

// Get all projects 
{data:[ 
    { 
     id: 1 
     ... 
     team:{ 
      data: { 
       id:15 
       ... 
      } 

     } 
    }, 
    { 
     id:2, 
     .... 
    }, 
    { 
     id:3, 
     ... 
    } 
]} 

'데이터'컨테이너가 제거되도록 스키마를 작성하려면 어떻게해야합니까? 이 같은

export const project = new schema.Entity('projects', { 
    team: team, // team omitted 
}, 
{ 
    processStrategy: (value, parent, key) => parent.data 
} 
) 

export const arrayOfProjects = new schema.Array(project) 

그리고 내가 사용 : 다음과 같습니다

const normalizedProjects = normalize(jsonResponse, arrayOfProjects) 

normalizedProjects을 :

{ 
    entities:{ 
     projects:{ 
      undefined:{ 
       0:{ 
        team:{ 
         data:{ 
          id:15, 
          ... 
         } 
        } 
       }, 
       1:{...}, 
       2:{...}. 
       ... 
       50:{...}, 
      } 
     } 
    }, 
    result:[] // length is 0 
} 

내가 왜 모르겠어요처럼 현재, 내 스키마 보인다 프로젝트 목록도 '정의되지 않음'에 포함됩니까?

답변

0

당신이 원하는 당신의 개체 스키마의 각 data 제거하거나 데이터를 변경하는 편지 processStrategy을 포함해야합니다 (또는 아무것도 다른 fundamentalyl 변경) 생략. (tests에서 더 많은 예제 참조)

+0

덕분에, 나는 지금 시도했지만 나는 processStrategy처럼 보이는 processStrategy 함수에서 반환하고 무엇이든 '정의되지 않은'객체 부모를 제거하기 위해 아무것도 할 수없는 것 parent, key) => parent.data; 무엇이 그 원인 일 수 있습니까? – Adam

+0

몇 가지 코드를 보여줄 수 있다면, 현재하고있는 일이 훨씬 더 명확 할 것입니다. –

+0

원본 질문을 편집하여 데이터를 줄이고 프로세스 전략을 위해 내가하고있는 것을 보여줍니다. – Adam

1

또한 json_api 스키마를 사용합니다. 어때? (값 : 팁을위한

const projectsSchema = new schema.Entity('projects', {}, { 
    processStrategy: processStrategy 
}); 

export const processStrategy = (value, parent, key) => { 
    const attr = value.attributes; 
    delete value.attributes; 
    return { ...value, ...attr }; 
}; 

export const fetchProjectsSchema = { 
    data: [projectsSchema] 
}