日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

normalizr API

發(fā)布時間:2025/3/8 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 normalizr API 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

API

  • normalize
  • denormalize
  • schema
    • Array
    • Entity
    • Object
    • Union
    • Values

normalize(data, schema)

Normalizes input data per the schema definition provided.?

根據(jù)提供的schema定義規(guī)范化輸入數(shù)據(jù)。

  • data: required Input JSON (or plain JS object) data that needs normalization.
  • schema: required A schema definition

Usage

import { normalize, schema } from 'normalizr';const myData = { users: [ { id: 1 }, { id: 2 } ] }; const user = new schema.Entity('users'); const mySchema = { users: [ user ] } const normalizedData = normalize(myData, mySchema);復制代碼

Output

{result: { users: [ 1, 2 ] },entities: {users: {'1': { id: 1 },'2': { id: 2 }}} }復制代碼

denormalize(input, schema, entities)

Denormalizes an input based on schema and provided entities from a plain object or Immutable data. The reverse of normalize.

基于schema和從普通對象或不可變數(shù)據(jù)提供的實體對輸入數(shù)據(jù)進行去規(guī)范化。 與規(guī)范化相反。

Special Note: Be careful with denormalization. Prematurely reverting your data to large, nested objects could cause performance impacts in React (and other) applications.

小心非規(guī)范化。 過早將數(shù)據(jù)還原到大型嵌套對象可能會對React(和其他)應用程序造成性能影響。

If your schema and data have recursive references, only the first instance of an entity will be given. Subsequent references will be returned as the id provided.

如果您的schema和數(shù)據(jù)具有遞歸引用,則只會給出實體的第一個實例。 隨后的引用將返回給ID。

  • input: required The normalized result that should be de-normalized. Usually the same value that was given in the result key of the output of normalize. 通常在規(guī)范化輸出的結果鍵中給出相同的值。
  • schema: required A schema definition that was used to get the value for input.
  • entities: required An object, keyed by entity schema names that may appear in the denormalized output. Also accepts an object with Immutable data.

Usage

import { denormalize, schema } from 'normalizr';const user = new schema.Entity('users'); const mySchema = { users: [ user ] } const entities = { users: { '1': { id: 1 }, '2': { id: 2 } } }; const denormalizedData = denormalize({ users: [ 1, 2 ] }, mySchema, entities);復制代碼

Output

{ users: [{ id: 1 },{ id: 2 }] }復制代碼

schema

Array(definition, schemaAttribute)

Creates a schema to normalize an array of entities. If the input value is an Object instead of an Array, the normalized result will be an Array of the Object's values.

創(chuàng)建一個schema來規(guī)范化實體數(shù)組。 如果輸入值是Object而不是Array,則歸一化結果將是Object的值的Array。

Note: The same behavior can be defined with shorthand syntax: [ mySchema ]

相同的行為可以用速記語法來定義

  • definition: required A singular schema that this array contains or a mapping of schema to attribute values.
需要此數(shù)組包含的單一schema?或將schema?映射到屬性值。
  • schemaAttribute: optional (required if definition is not a singular schema) The attribute on each entity found that defines what schema, per the definition mapping, to use when normalizing.
    Can be a string or a function. If given a function, accepts the following arguments:
    • value: The input value of the entity.
    • parent: The parent object of the input array.
    • key: The key at which the input array appears on the parent object.

Instance Methods

  • define(definition): When used, the definition passed in will be merged with the original definition passed to the Array constructor. This method tends to be useful for creating circular references in schema.
使用時,傳入的definition將與傳遞給Array構造函數(shù)的原始definition合并。 該方法往往對于在schema中創(chuàng)建循環(huán)引用很有用。

Usage

To describe a simple array of a singular entity type:

const data = [ { id: '123', name: 'Jim' }, { id: '456', name: 'Jane' } ]; const userSchema = new schema.Entity('users');const userListSchema = new schema.Array(userSchema); // or use shorthand syntax: const userListSchema = [ userSchema ];const normalizedData = normalize(data, userListSchema);復制代碼

Output

{entities: {users: {'123': { id: '123', name: 'Jim' },'456': { id: '456', name: 'Jane' }}},result: [ '123', '456' ] }復制代碼

If your input data is an array of more than one type of entity, it is necessary to define a schema mapping.

如果您的輸入數(shù)據(jù)是多個類型的實體的數(shù)組,則需要定義一個schema映射。

Note: If your data returns an object that you did not provide a mapping for, the original object will be returned in the result and an entity will not be created.

如果您的數(shù)據(jù)返回一個未提供映射的對象,則將返回原始對象,并且不會創(chuàng)建一個實體。

For example:

const data = [ { id: 1, type: 'admin' }, { id: 2, type: 'user' } ];const userSchema = new schema.Entity('users'); const adminSchema = new schema.Entity('admins'); const myArray = new schema.Array({admins: adminSchema,users: userSchema }, (input, parent, key) => `${input.type}s`);const normalizedData = normalize(data, myArray);復制代碼

Output

{entities: {admins: { '1': { id: 1, type: 'admin' } },users: { '2': { id: 2, type: 'user' } }},result: [{ id: 1, schema: 'admins' },{ id: 2, schema: 'users' }] }復制代碼

Entity(key, definition = {}, options = {})

  • key: required The key name under which all entities of this type will be listed in the normalized response. Must be a string name.
  • definition: A definition of the nested entities found within this entity. Defaults to empty object.
在該實體內發(fā)現(xiàn)的嵌套實體的definition。 默認為空對象。
You do not need to define any keys in your entity other than those that hold nested entities. All other values will be copied to the normalized entity's output.
您不需要在您的實體中定義任何鍵,除了嵌套實體的鍵。 所有其他值將被復制到標準化實體的輸出。definition不為空表示有嵌套。
  • options:
    • idAttribute: The attribute where unique IDs for each of this entity type can be found.
      Accepts either a string key or a function that returns the IDs value. Defaults to 'id'.
      As a function, accepts the following arguments, in order:
      • value: The input value of the entity.
      • parent: The parent object of the input array.
      • key: The key at which the input array appears on the parent object. 輸入的數(shù)組出現(xiàn)在父對象上的鍵。
    • mergeStrategy(entityA, entityB): Strategy to use when merging two entities with the same id value. Defaults to merge the more recently found entity onto the previous.
合并具有相同ID值的兩個實體時使用的策略。 默認將最近發(fā)現(xiàn)的實體合并到上一個實體。
    • processStrategy(value, parent, key): Strategy to use when pre-processing the entity. Use this method to add extra data, defaults, and/or completely change the entity before normalization is complete. Defaults to returning a shallow copy of the input entity.
預處理實體時使用的策略。 在規(guī)范化完成之前,使用此方法添加額外的數(shù)據(jù),默認值和/或完全更改實體。 默認返回輸入實體的淺拷貝。
Note: It is recommended to always return a copy of your input and not modify the original.建議始終返回您的輸入的副本,而不是修改原件。
The function accepts the following arguments, in order:
  • value: The input value of the entity.
  • parent: The parent object of the input array.
  • key: The key at which the input array appears on the parent object.

Instance Methods

  • define(definition): When used, the definition passed in will be merged with the original definition passed to the Entity constructor. This method tends to be useful for creating circular references in schema.
使用時,傳入的definition將與傳遞給Entity構造函數(shù)的原始definition合并。 該方法往往對于在模式中創(chuàng)建循環(huán)引用很有用。

Instance Attributes

  • key: Returns the key provided to the constructor.
  • idAttribute: Returns the idAttribute provided to the constructor in options.

Usage

const data = { id_str: '123', url: 'https://twitter.com', user: { id_str: '456', name: 'Jimmy' } };const user = new schema.Entity('users', {}, { idAttribute: 'id_str' }); const tweet = new schema.Entity('tweets', { user: user }, { idAttribute: 'id_str',// Apply everything from entityB over entityA, except for "favorites"mergeStrategy: (entityA, entityB) => ({...entityA,...entityB,favorites: entityA.favorites}),// Remove the URL field from the entityprocessStrategy: (entity) => omit(entity, 'url') });const normalizedData = normalize(data, tweet);復制代碼

Output

{entities: {tweets: { '123': { id_str: '123', user: '456' } },users: { '456': { id_str: '456', name: 'Jimmy' } }},result: '123' }復制代碼

idAttribute Usage

When passing the idAttribute a function, it should return the IDs value.

idAttribute作為key

For Example:

const data = [{ id: '1', guest_id: null, name: 'Esther' },{ id: '1', guest_id: '22', name: 'Tom' }, ];const patronsSchema = new schema.Entity('patrons', undefined, {// idAttribute *functions* must return the ids **value** (not key)idAttribute: value => value.guest_id ? `${value.id}-${value.guest_id}` : value.id, });normalize(data, [patronsSchema]);復制代碼

Output

{entities: {patrons: {'1': { id: '1', guest_id: null, name: 'Esther' },'1-22': { id: '1', guest_id: '22', name: 'Tom' },}},result: ['1', '1-22'] }復制代碼

Object(definition)

Define a plain object mapping that has values needing to be normalized into Entities.

定義一個普通對象映射,它需要將值歸一化為Entities。

Note: The same behavior can be defined with shorthand syntax: { ... }

  • definition: required A definition of the nested entities found within this object. Defaults to empty object.
    You do not need to define any keys in your object other than those that hold other entities. All other values will be copied to the normalized output.

Instance Methods

  • define(definition): When used, the definition passed in will be merged with the original definition passed to the Object constructor. This method tends to be useful for creating circular references in schema.

Usage

// Example data response const data = { users: [ { id: '123', name: 'Beth' } ] };const user = new schema.Entity('users'); const responseSchema = new schema.Object({ users: new schema.Array(user) }); // or shorthand const responseSchema = { users: new schema.Array(user) };const normalizedData = normalize(data, responseSchema);復制代碼

Output

{entities: {users: { '123': { id: '123', name: 'Beth' } }},result: { users: [ '123' ] } }復制代碼

Union(definition, schemaAttribute)

Describe a schema which is a union of multiple schemas. This is useful if you need the polymorphic behavior provided by schema.Array or schema.Values but for non-collection fields.

描述一個多個schema的并集的schema。 如果您需要由schema.Array或schema.Values提供的多態(tài)性行為,但對于非收集字段,這是非常有用的。

  • definition: required An object mapping the definition of the nested entities found within the input array
  • schemaAttribute: required The attribute on each entity found that defines what schema, per the definition mapping, to use when normalizing.
    Can be a string or a function. If given a function, accepts the following arguments:
    • value: The input value of the entity.
    • parent: The parent object of the input array.
    • key: The key at which the input array appears on the parent object.

Instance Methods

  • define(definition): When used, the definition passed in will be merged with the original definition passed to the Union constructor. This method tends to be useful for creating circular references in schema.

Usage

Note: If your data returns an object that you did not provide a mapping for, the original object will be returned in the result and an entity will not be created.

const data = { owner: { id: 1, type: 'user', name: 'Anne' } };const user = new schema.Entity('users'); const group = new schema.Entity('groups'); const unionSchema = new schema.Union({user: user,group: group }, 'type');const normalizedData = normalize(data, { owner: unionSchema });復制代碼

Output

{entities: {users: { '1': { id: 1, type: 'user', name: 'Anne' } }},result: { owner: { id: 1, schema: 'user' } } }復制代碼

Values(definition, schemaAttribute)

Describes a map whose values follow the given schema.

  • definition: required A singular schema that this array contains or a mapping of schema to attribute values.
  • schemaAttribute: optional (required if definition is not a singular schema) The attribute on each entity found that defines what schema, per the definition mapping, to use when normalizing.
    Can be a string or a function. If given a function, accepts the following arguments:
    • value: The input value of the entity.
    • parent: The parent object of the input array.
    • key: The key at which the input array appears on the parent object.

Instance Methods

  • define(definition): When used, the definition passed in will be merged with the original definition passed to the Values constructor. This method tends to be useful for creating circular references in schema.

Usage

const data = { firstThing: { id: 1 }, secondThing: { id: 2 } };const item = new schema.Entity('items'); const valuesSchema = new schema.Values(item);const normalizedData = normalize(data, valuesSchema);復制代碼

Output

{entities: {items: { '1': { id: 1 }, '2': { id: 2 } }},result: { firstThing: 1, secondThing: 2 } }復制代碼

If your input data is an object that has values of more than one type of entity, but their schema is not easily defined by the key, you can use a mapping of schema, much like schema.Union and schema.Array.

Note: If your data returns an object that you did not provide a mapping for, the original object will be returned in the result and an entity will not be created.

For example:

const data = {'1': { id: 1, type: 'admin' }, '2': { id: 2, type: 'user' } };const userSchema = new schema.Entity('users'); const adminSchema = new schema.Entity('admins'); const valuesSchema = new schema.Values({admins: adminSchema,users: userSchema }, (input, parent, key) => `${input.type}s`);const normalizedData = normalize(data, valuesSchema);復制代碼

Output

{entities: {admins: { '1': { id: 1, type: 'admin' } },users: { '2': { id: 2, type: 'user' } }},result: {'1': { id: 1, schema: 'admins' },'2': { id: 2, schema: 'users' }} }復制代碼



總結

以上是生活随笔為你收集整理的normalizr API的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內容還不錯,歡迎將生活随笔推薦給好友。