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, - options: IObserverOptions & { + options: IObserverOptions

& { /** * @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.ForwardRefRenderFunction, - Options extends IObserverOptions + Options extends IObserverOptions> >( baseComponent: C, options?: Options @@ -80,7 +81,7 @@ export function observer

( | React.FunctionComponent

| React.ForwardRefExoticComponent & React.RefAttributes>, // TODO remove in next major - options?: IObserverOptions + options?: IObserverOptions

) { 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)