{"record":{"id":"49d4c2faa42d9732","repo":"marmelab/react-admin","slug":"referencemanyfieldbase-requires-either-a-render","errorCode":null,"errorMessage":"<ReferenceManyFieldBase> requires either a 'render' prop or 'children' prop","messagePattern":"<ReferenceManyFieldBase> requires either a 'render' prop or 'children' prop","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"packages/ra-core/src/controller/field/ReferenceManyFieldBase.tsx","lineNumber":105,"sourceCode":"        ReferenceRecordType\n    >({\n        debounce,\n        filter,\n        exporter,\n        page,\n        perPage,\n        record,\n        reference,\n        resource,\n        sort,\n        source,\n        storeKey,\n        target,\n        queryOptions,\n    });\n\n    if (!render && !children) {\n        throw new Error(\n            \"<ReferenceManyFieldBase> requires either a 'render' prop or 'children' prop\"\n        );\n    }\n\n    const {\n        data,\n        error: controllerError,\n        filterValues,\n        hasNextPage,\n        hasPreviousPage,\n        isPaused,\n        isPending,\n        isPlaceholderData,\n        total,\n    } = controllerProps;\n\n    const shouldRenderLoading =\n        isPending && !isPaused && loading !== false && loading !== undefined;","sourceCodeStart":87,"sourceCodeEnd":123,"githubUrl":"https://github.com/marmelab/react-admin/blob/051f511bb0afb5ea565c2d3728bf4dab0a6fa5e0/packages/ra-core/src/controller/field/ReferenceManyFieldBase.tsx#L87-L123","documentation":"ReferenceManyFieldBase (core of <ReferenceManyField>) fetches many related records for a reverse relation (target field) and needs a render prop or children to display them. It throws when neither rendering mechanism is supplied since the fetched data could not be displayed.","triggerScenarios":"Rendering <ReferenceManyFieldBase reference=\"comments\" target=\"post_id\" /> with no render prop and no children; passing a children expression that resolves to undefined/false at runtime.","commonSituations":"Refactoring from a UI-kit variant and dropping the <Datagrid>/<SimpleList> child; conditional children that silently evaluate falsy; building a custom wrapper around the headless base and forgetting the render layer.","solutions":["Add children: <ReferenceManyField reference=\"comments\" target=\"post_id\"><Datagrid>...</Datagrid></ReferenceManyField>","Or a render prop: render={({data, isPending, error}) => ...}","Guard conditional children so a valid child is always passed"],"exampleFix":"// before\n<ReferenceManyFieldBase reference=\"comments\" target=\"post_id\" sort={{ field: 'created_at', order: 'DESC' }} />\n// after\n<ReferenceManyFieldBase reference=\"comments\" target=\"post_id\">\n  <Datagrid>\n    <TextField source=\"body\" />\n  </Datagrid>\n</ReferenceManyFieldBase>","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(<ReferenceManyFieldBase reference=\"comments\" target=\"post_id\" />);\n} catch (e) { logAndFallback(e); }","preventionTips":["Always supply children (Datagrid) or render","Avoid falsy conditional children","Test reverse-relation fields","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"}