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,