【问题标题】:normalizr v3 and JSON apinormalizr v3 和 JSON api
【发布时间】:2017-05-22 04:10:00
【问题描述】:

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

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

【问题讨论】:

    标签: javascript normalizr


    【解决方案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]
    }
    

    【讨论】:

      【解决方案2】:

      您希望省略data(或其他任何基本内容更改)的每个实体架构都需要包含一个processStrategy,您编写该processStrategy 以删除或更改任何数据。 (在tests 中查看更多示例)

      【讨论】:

      • 感谢您的提示,我现在已经尝试过了,但我似乎无法做任何事情来删除“未定义”对象,无论我从 processStrategy 函数返回什么,它看起来像 processStrategy:(值,父级,键)=> 父级数据;。知道是什么原因造成的吗?
      • 如果你能显示一些代码,你在做什么可能会更清楚。
      • 编辑了原始问题以精简数据并显示我为流程策略所做的工作。
      • 您使用的是 jsonapi.org 中的 JSONAPI 模式? (不仅仅是“json api”)。所以,Normalizr 对 JSONAPI 来说并不是很好。有一个 Normalizr 的分支,它试图与它很好地配合,但我不确定它是否可以去任何地方github.com/prenaudin/normalize-json-api
      猜你喜欢
      • 1970-01-01
      • 2016-11-03
      • 2019-03-24
      • 2014-03-12
      • 1970-01-01
      • 2017-06-04
      • 2016-06-10
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多