Я использую Next.js 15 с Tailwind CSS V3 и пакетом react-markdown для рендеринга результатов чата AI внутри компонента.
Я настроил рендеринг уценки, чтобы заменить все элементы , , на стилизованные. использует классы Tailwind, чтобы избежать проблем с типографским интервалом по умолчанию.
Несмотря на это, между элементами по-прежнему остается избыточное вертикальное пространство — особенно при заменах h1, h2 и h3. Я пробовал удалить все поля и добавить mb-0, mt-0 и т. д., но пробелы остались.
Вот как это выглядит (я добавил цвета фона и аннотации отладки):
remark-gfm
[*]rehype-highlight
[/list]
Ожидаемый результат:
Минимальное вертикальное расстояние между элементами в пузырьках чата.
Фактический результат:
Заголовки и следующее за ними содержимое имеют нежелательный вид пробелы, которые не схлопываются.
Код (ChatPage.tsx)
(
),
h2: ({ node, ...props }) => (
),
h3: ({ node, ...props }) => (
),
p: ({ node, ...props }) => (
),
ul: ({ node, ...props }) => (
[list]
),
li: ({ node, ...props }) => (
[*]
),
code: ({ node, ...props }) => (
),
pre: ({ node, ...props }) => (
)
}}
>
{msg.text}
Попробовал:
Заменить все заголовки тегами
[*]Обнулить поля с помощью mb-0, mt-0
[*]Уменьшить соседний интервал с помощью [+ *] в Tailwind
[*]Проверка вычисляемых стилей — никаких неожиданных полей
[/list]
Вопрос:
[list]
[*]Есть ли что-то в структуре реакции или в том, как она анализирует элементы, которые по-прежнему вызывают вертикальные промежутки между компонентами пользовательского заголовка и их последующими одноуровневыми элементами?
[*]Нужно ли мне обертывать дочерние элементы или сглаживать структуру блоков?
[/list]
Будем очень признательны за любые советы.
Пример того, что отображается в DOM
useMemo
Я использую [b]Next.js 15[/b] с [b]Tailwind CSS V3[/b] и пакетом [b]react-markdown[/b] для рендеринга результатов чата AI внутри компонента. Я настроил рендеринг уценки, чтобы заменить все элементы , , на стилизованные. использует классы Tailwind, чтобы избежать проблем с типографским интервалом по умолчанию. Несмотря на это, между элементами по-прежнему остается [b]избыточное вертикальное пространство[/b] — особенно при заменах h1, h2 и h3. Я пробовал удалить все поля и добавить mb-0, mt-0 и т. д., но пробелы остались. Вот как это выглядит (я добавил цвета фона и аннотации отладки): [img]https://i.sstatic.net/z1VK4nJ5.png[/img]
Что я использую: [list] [*][b]Next.js[/b] 15 [*][b]React[/b] 19 [*][b]ReactMarkdown[/b] act-markdown@9 [*][b]Tailwind CSS[/b] v3 [*][b]Плагины:[/b]
[code]remark-gfm [*]rehype-highlight [/list]
Ожидаемый результат: Минимальное вертикальное расстояние между элементами в пузырьках чата. Фактический результат: Заголовки и следующее за ними содержимое имеют нежелательный вид пробелы, которые не схлопываются.
Заменить все заголовки тегами [*]Обнулить поля с помощью mb-0, mt-0 [*]Уменьшить соседний интервал с помощью [+ *] в Tailwind [*]Проверка вычисляемых стилей — никаких неожиданных полей [/list]
Вопрос: [list] [*]Есть ли что-то в структуре реакции или в том, как она анализирует элементы, которые по-прежнему вызывают вертикальные промежутки между компонентами пользовательского заголовка и их последующими одноуровневыми элементами?
[*]Нужно ли мне обертывать дочерние элементы или сглаживать структуру блоков?
[/list] Будем очень признательны за любые советы. Пример того, что отображается в DOM
useMemo[/code] and [code]useCallback[/code] are both hooks provided by React to optimize performance by memoizing values or functions. Let's break down the differences and when to use each:
useMemo
[b]Purpose:[/b] [code]useMemo[/code] is used to memoize a computed value.
[b]Syntax:[/b] class="bg-orange my-2 overflow-x-auto rounded p-2" >[code]const memoizedValue = useMemo(() => computeExpensiveValue(a, b), [a, b]); [/code] [b]When to Use:[/b] [list] [*] [b]Expensive Calculations:[/b] Use [code]useMemo[/code] when you have a calculation that is computationally expensive and you want to avoid recalculating it on every render unless its dependencies change.
[*] [b]Derived State:[/b] When deriving state from props or state that requires some computation.