facebook/relay · error

When assigning an array of items, none of the items should b

Error message

When assigning an array of items, none of the items should be null or undefined.

What it means

Thrown when an array assigned to a plural linked field through an updatable proxy contains null or undefined items. Relay cannot link a null entry in the store for a plural linked field, so every element of the assigned array must be a valid record object.

Source

Thrown at packages/relay-runtime/mutations/createUpdatableProxy.js:217

  }
}

function createSetterForPluralLinkedField(
  selection: ReaderLinkedField,
  variables: Variables,
  updatableProxyRootRecord: RecordProxy,
  recordSourceProxy: RecordSourceProxy,
) {
  return function set(newValue: ReadonlyArray<{__id: string, ...}>) {
    const newVariables = getArgumentValues(selection.args ?? [], variables);
    if (newValue == null) {
      throw new Error(
        'Do not assign null to plural linked fields; assign an empty array instead.',
      );
    } else {
      const recordProxies = newValue.map((item): ?RecordProxy => {
        if (item == null) {
          throw new Error(
            'When assigning an array of items, none of the items should be null or undefined.',
          );
        }
        const {__id} = item;
        if (__id == null) {
          throw new Error(
            'The __id field must be present on each item passed to the setter. This indicates a bug in Relay.',
          );
        }
        const newValueRecord = recordSourceProxy.get(__id);
        if (newValueRecord == null) {
          throw new Error(
            `Did not find item with data id ${__id} in the store.`,
          );
        }
        return newValueRecord;
      });
      updatableProxyRootRecord.setLinkedRecords(

View on GitHub (pinned to 668b1b85e0)

Solutions

  1. Filter out null/undefined before assigning: `field.set(items.filter(Boolean))`
  2. Use `items.filter(item => item != null)` to be explicit about both null and undefined
  3. Fix the server/fragment so list items are non-null (e.g. `[Type!]!]`) if nulls should never appear

Example fix

// before
updatable.viewer.friends.set(friends);
// after
updatable.viewer.friends.set(friends.filter(f => f != null));
Defensive patterns

Strategy: validation

Validate before calling

function assertNoNullItems(items) {
  if (items.some(item => item == null)) {
    throw new TypeError('Array assigned to plural linked field contains null/undefined items');
  }
}

Type guard

function hasNoNullItems<T>(items: ReadonlyArray<T | null | undefined>): items is ReadonlyArray<T> {
  return items.every((item): item is T => item != null);
}

Try / catch

try {
  field.set(items);
} catch (e) {
  if (e.message.includes('none of the items should be null')) field.set(items.filter(i => i != null));
  else throw e;
}

Prevention

When it happens

Trigger: Calling `pluralField.set(items)` where `items` is an array that includes null or undefined elements, e.g. `set([a, null, c])` or an array built from a sparse or nullable-mapped source.

Common situations: Mapping over server data that contains null list items (GraphQL lists are nullable by default); spreading arrays with holes; filtering logic that leaves undefined entries.

Related errors


AI-assisted analysis of facebook/relay@668b1b85e0 (2026-09-02). Data as JSON: /api/errors/110b980721f2842a. Report an issue: GitHub.