1

我想规范化从 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
}

我也不确定为什么项目列表包含在“未定义”中?

4

2 回答 2

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]
}
于 2017-01-10T08:04:46.480 回答
0

您希望data省略的每个实体模式(或其他任何基本更改)都需要包含您编写的processStrategy以删除或更改任何数据。(请参阅测试中的更多示例)

于 2017-01-07T13:51:16.080 回答