From 7cbbaedd32edafc10c7c0b128461dc123771c5e0 Mon Sep 17 00:00:00 2001 From: clover caruso Date: Thu, 19 Mar 2026 23:30:39 -0700 Subject: [PATCH] fix: don't need to call `memo()` on every component --- src/Memoizer.ts | 15 ++++----------- 1 file changed, 4 insertions(+), 11 deletions(-) diff --git a/src/Memoizer.ts b/src/Memoizer.ts index dfb22269f8a33ff634497743c24f2c209c22dcd8..d339844a00c5ec4bf86bb86fcab91fc9d7f5a8a5 100644 --- a/src/Memoizer.ts +++ b/src/Memoizer.ts @@ -1,5 +1,5 @@ import { ASSERT, UNWRAP } from "@clo/lib/assert.ts"; -import { type JSX, type Key, memo, type ReactNode } from "react"; +import { type JSX, type Key, type ReactNode } from "react"; import { type Components } from "rehype-react"; import remarkRehype from "remark-rehype"; import { Fragment, jsx } from "react/jsx-runtime"; @@ -29,10 +29,9 @@ type AstProcessor = Processor; */ export class Memoizer { // options incrementally updated via `reconfigure` - #baseProcessor: BaseProcessor = defaultProcessor as BaseProcessor; + #baseProcessor: BaseProcessor = defaultProcessor; #astProcessor: AstProcessor | null = null; #components: Partial = {}; - #previousComponents: Partial = {}; // incremental parsing graph, structure of arrays #predict: Predict | null = null; @@ -50,7 +49,7 @@ export class Memoizer { if ( this.#astProcessor !== null && this.#baseProcessor === processor && - componentsAreEqual(this.#previousComponents, components) && + componentsAreEqual(this.#components, components) && !!this.#predict === predict ) { return; @@ -64,13 +63,7 @@ export class Memoizer { } this.#astProcessor = processor as unknown as AstProcessor; - // Memoize every component. We want to ensure that React doesn't re-render - // components for no reason. Just because the parent renders doesn't mean - // the children should. - this.#components = Object.fromEntries( - Object.entries(components).map(([k, v]) => [k, typeof v === "function" ? memo(v) : v]), - ) as Partial; - this.#previousComponents = components; + this.#components = components; this.#content = ""; this.#positions = []; this.#parsed = []; -- 2.54.0