diff --git a/.changeset/quiet-stars-sing.md b/.changeset/quiet-stars-sing.md new file mode 100644 index 000000000..1aaa7ad06 --- /dev/null +++ b/.changeset/quiet-stars-sing.md @@ -0,0 +1,5 @@ +--- +"mobx-react-lite": patch +--- + +support passing `propsAreEqual` for `observer()` HOC diff --git a/packages/mobx-react-lite/src/observer.ts b/packages/mobx-react-lite/src/observer.ts index 6d9948d63..92a5f5e72 100644 --- a/packages/mobx-react-lite/src/observer.ts +++ b/packages/mobx-react-lite/src/observer.ts @@ -23,17 +23,18 @@ const ReactMemoSymbol = hasSymbol * @deprecated Observer options will be removed in the next major version of mobx-react-lite. * Look at the individual properties for alternatives. */ -export interface IObserverOptions { +export interface IObserverOptions
{ /** * @deprecated Pass a `React.forwardRef` component to observer instead of using the options object * e.g. `observer(React.forwardRef(fn))` */ readonly forwardRef?: boolean + propsAreEqual?: (prevProps: Readonly
, nextProps: Readonly
) => boolean } export function observer
(
baseComponent: React.ForwardRefRenderFunction & {
/**
* @deprecated Pass a `React.forwardRef` component to observer instead of using the options object
* e.g. `observer(React.forwardRef(fn))`
@@ -46,7 +47,7 @@ export function observer (
export function observer (
baseComponent: React.FunctionComponent ,
- options?: IObserverOptions
+ options?: IObserverOptions
): React.FunctionComponent
export function observer (
@@ -58,7 +59,7 @@ export function observer (
>
export function observer<
C extends React.FunctionComponent (
| React.FunctionComponent
| React.ForwardRefExoticComponent
) {
if (process.env.NODE_ENV !== "production" && warnObserverOptionsDeprecated && options) {
warnObserverOptionsDeprecated = false
@@ -156,7 +157,7 @@ export function observer (
// memo; we are not interested in deep updates
// in props; we assume that if deep objects are changed,
// this is in observables, which would have been tracked anyway
- observerComponent = memo(observerComponent)
+ observerComponent = memo(observerComponent, options?.propsAreEqual)
copyStaticProperties(baseComponent, observerComponent)