diff --git a/examples/demo/src/orders/NbItemsField.tsx b/examples/demo/src/orders/NbItemsField.tsx index cab198224c5..ab62f241779 100644 --- a/examples/demo/src/orders/NbItemsField.tsx +++ b/examples/demo/src/orders/NbItemsField.tsx @@ -1,11 +1,12 @@ import * as React from 'react'; -import { FC } from 'react'; -import { FunctionField, Record } from 'react-admin'; +import { FunctionField, FieldProps } from 'react-admin'; import { Order } from '../types'; -const render = (record?: Record) => (record as Order).basket.length; +const render = (record?: Order) => record && record.basket.length; -const NbItemsField: FC = () => ; +const NbItemsField = ({ record }: FieldProps) => ( + record={record} render={render} /> +); NbItemsField.defaultProps = { label: 'Nb Items', diff --git a/packages/ra-ui-materialui/src/field/FunctionField.tsx b/packages/ra-ui-materialui/src/field/FunctionField.tsx index 1a1aebddc42..c2e02eaa155 100644 --- a/packages/ra-ui-materialui/src/field/FunctionField.tsx +++ b/packages/ra-ui-materialui/src/field/FunctionField.tsx @@ -1,5 +1,5 @@ import * as React from 'react'; -import { FC, memo } from 'react'; +import { useMemo } from 'react'; import { Record } from 'ra-core'; import Typography, { TypographyProps } from '@material-ui/core/Typography'; @@ -16,19 +16,27 @@ import { PublicFieldProps, InjectedFieldProps, fieldPropTypes } from './types'; * render={record => record && `${record.first_name} ${record.last_name}`} * /> */ -const FunctionField: FC = memo( - ({ className, record, source = '', render, ...rest }) => - record ? ( - - {render(record, source)} - - ) : null -); +const FunctionField = ({ + className, + record, + source = '', + render, + ...rest +}: FunctionFieldProps) => + useMemo( + () => + record ? ( + + {render(record, source)} + + ) : null, + [className, record, source, render, rest] + ); FunctionField.defaultProps = { addLabel: true,