{"record":{"id":"88c58c47fa3b23ee","repo":"marmelab/react-admin","slug":"referenceonefieldbase-requires-either-a-render","errorCode":null,"errorMessage":"<ReferenceOneFieldBase> requires either a 'render' prop or 'children' prop","messagePattern":"<ReferenceOneFieldBase> requires either a 'render' prop or 'children' prop","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/ra-core/src/controller/field/ReferenceOneFieldBase.tsx","lineNumber":76,"sourceCode":"        queryOptions,\n    });\n\n    const path = useGetPathForRecord({\n        record: controllerProps.referenceRecord,\n        resource: reference,\n        link,\n    });\n\n    const context = useMemo<UseReferenceFieldControllerResult>(\n        () => ({\n            ...controllerProps,\n            link: path,\n        }),\n        [controllerProps, path]\n    );\n\n    if (!render && !children) {\n        throw new Error(\n            \"<ReferenceOneFieldBase> requires either a 'render' prop or 'children' prop\"\n        );\n    }\n\n    const recordFromContext = useRecordContext<RecordType>(props);\n    const {\n        error: controllerError,\n        isPending,\n        isPaused,\n        referenceRecord,\n    } = controllerProps;\n\n    const shouldRenderLoading =\n        !isPaused && isPending && loading !== false && loading !== undefined;\n    const shouldRenderOffline =\n        isPaused && isPending && offline !== false && offline !== undefined;\n    const shouldRenderError =\n        !!controllerError && error !== false && error !== undefined;","sourceCodeStart":58,"sourceCodeEnd":94,"githubUrl":"https://github.com/marmelab/react-admin/blob/051f511bb0afb5ea565c2d3728bf4dab0a6fa5e0/packages/ra-core/src/controller/field/ReferenceOneFieldBase.tsx#L58-L94","documentation":"ReferenceOneFieldBase (core of <ReferenceOneField>) fetches the single related record matching a reverse relation and requires a render prop or children to display it. Missing both means the component has nothing to render, so react-admin throws during render.","triggerScenarios":"Using <ReferenceOneFieldBase reference=\"profile\" target=\"user_id\" /> with neither render nor children; children expression that evaluates to null/undefined at runtime (conditional JSX).","commonSituations":"Writing a one-to-one detail display and omitting the child component; copying the controller usage from docs but not the rendering part; migrating from a custom implementation to the headless base.","solutions":["Add children: <ReferenceOneFieldBase reference=\"profile\" target=\"user_id\"><TextField source=\"bio\" /></ReferenceOneFieldBase>","Or use render={({data, isPending, error}) => ...}","Check conditional children for falsy values"],"exampleFix":"// before\n<ReferenceOneFieldBase reference=\"profile\" target=\"user_id\" />\n// after\n<ReferenceOneFieldBase reference=\"profile\" target=\"user_id\">\n  <TextField source=\"bio\" />\n</ReferenceOneFieldBase>","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(<ReferenceOneFieldBase reference=\"profile\" target=\"user_id\" />);\n} catch (e) { logAndFallback(e); }","preventionTips":["Always supply children or render","Avoid falsy conditional children","Test one-to-one displays","Prefer UI-kit wrapper"],"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"}