{"record":{"id":"755da9c7c3b0f48f","repo":"marmelab/react-admin","slug":"referencearrayfieldbase-requires-either-a-rende","errorCode":null,"errorMessage":"<ReferenceArrayFieldBase> requires either a 'render' prop or 'children' prop","messagePattern":"<ReferenceArrayFieldBase> requires either a 'render' prop or 'children' prop","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/ra-core/src/controller/field/ReferenceArrayFieldBase.tsx","lineNumber":109,"sourceCode":"    const record = useRecordContext(props);\n    const controllerProps = useReferenceArrayFieldController<\n        RecordType,\n        ReferenceRecordType\n    >({\n        filter,\n        exporter,\n        page,\n        perPage,\n        record,\n        reference,\n        resource,\n        sort,\n        source,\n        queryOptions,\n    });\n\n    if (!render && !children) {\n        throw new Error(\n            \"<ReferenceArrayFieldBase> requires either a 'render' prop or 'children' prop\"\n        );\n    }\n    const {\n        error: controllerError,\n        isPending,\n        isPaused,\n        isPlaceholderData,\n    } = controllerProps;\n\n    const shouldRenderLoading =\n        isPending && !isPaused && loading !== undefined && loading !== false;\n    const shouldRenderOffline =\n        isPaused &&\n        (isPending || isPlaceholderData) &&\n        offline !== undefined &&\n        offline !== false;\n    const shouldRenderError =","sourceCodeStart":91,"sourceCodeEnd":127,"githubUrl":"https://github.com/marmelab/react-admin/blob/051f511bb0afb5ea565c2d3728bf4dab0a6fa5e0/packages/ra-core/src/controller/field/ReferenceArrayFieldBase.tsx#L91-L127","documentation":"ReferenceArrayFieldBase is the headless component behind <ReferenceArrayField>; it needs a way to render the fetched related records, supplied either via a render prop or via children (a function child or a component such as <SingleFieldList>). react-admin throws when neither is given because there would be nothing to display.","triggerScenarios":"Rendering <ReferenceArrayField source=\"tag_ids\" reference=\"tags\" /> with no render prop and no children, or passing children that are undefined/null at runtime (e.g. a conditional expression that evaluates to falsy, or only an inert prop like sort/source).","commonSituations":"Copying a usage example and deleting the child list component; conditionally rendering children as {cond && <Child/>} inside a JSX attribute position instead of inside the field; TypeScript not flagging it because children is optional in some overloads.","solutions":["Pass a child renderer, e.g. <ReferenceArrayField source=\"tag_ids\" reference=\"tags\"><SingleFieldList><ChipField source=\"name\"/></SingleFieldList></ReferenceArrayField>","Or use the render prop: <ReferenceArrayField source=\"tag_ids\" reference=\"tags\" render={({error, isPending, data}) => ...} />","Check that children is not a falsy expression (undefined, false, empty conditional) at runtime"],"exampleFix":"// before\n<ReferenceArrayField source=\"tag_ids\" reference=\"tags\" />\n// after\n<ReferenceArrayField source=\"tag_ids\" reference=\"tags\">\n  <SingleFieldList>\n    <ChipField source=\"name\" />\n  </SingleFieldList>\n</ReferenceArrayField>","handlingStrategy":"validation","validationCode":"const assertRenderable = (p: { render?: unknown; children?: unknown }) => {\n  if (p.render == null && p.children == null)\n    throw new Error('Provide render or children');\n};","typeGuard":"const canRender = (p: { render?: unknown; children?: unknown }): boolean =>\n  Boolean(p.render ?? p.children);","tryCatchPattern":"try {\n  render(<ReferenceArrayField source=\"tag_ids\" reference=\"tags\" />);\n} catch (e) { logAndFallback(e); }","preventionTips":["Always supply children or render","Avoid falsy conditional children","Test every field usage","Prefer UI-kit wrappers"],"tags":["react-admin","props-validation","reference-field","render-prop"],"backgroundTag":"missing-required-render-prop","analyzedSha":"051f511bb0afb5ea565c2d3728bf4dab0a6fa5e0","analyzedAt":"2026-08-30T02:28:14.926Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}