Skip to content

Commit cd72555

Browse files
committed
refactor: transform TDefaultTextualRenderer to render function
Too many elements is bad for performance
1 parent 4e1f2f4 commit cd72555

File tree

4 files changed

+19
-22
lines changed

4 files changed

+19
-22
lines changed

packages/render-html/src/TPhrasingRenderer.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ import { useTNodeChildrenRenderer } from './context/TChildrenRendererContext';
44
import { TDefaultRenderer } from './shared-types';
55
import { TNodeSubRendererProps } from './internal-types';
66
import useAssembledCommonProps from './hooks/useAssembledCommonProps';
7-
import TDefaultTextualRenderer from './TDefaultTextualRenderer';
7+
import renderTextualContent from './renderTextualContent';
88

99
export const TDefaultPhrasingRenderer: TDefaultRenderer<TPhrasing> = ({
1010
children,
@@ -18,7 +18,7 @@ export const TDefaultPhrasingRenderer: TDefaultRenderer<TPhrasing> = ({
1818
tnode,
1919
propsForChildren
2020
});
21-
return React.createElement(TDefaultTextualRenderer, props, resolvedChildren);
21+
return renderTextualContent(props, resolvedChildren);
2222
};
2323

2424
function InnerTPhrasingRenderer(props: TNodeSubRendererProps<TPhrasing>) {

packages/render-html/src/TTextRenderer.ts

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,18 +4,14 @@ import { TDefaultRenderer, TDefaultRendererProps } from './shared-types';
44
import { TNodeSubRendererProps } from './internal-types';
55
import { useInternalTextRenderer } from './context/RenderRegistryProvider';
66
import useAssembledCommonProps from './hooks/useAssembledCommonProps';
7-
import TDefaultTextualRenderer from './TDefaultTextualRenderer';
7+
import renderTextualContent from './renderTextualContent';
88

99
export const TDefaultTextRenderer: TDefaultRenderer<TText> = ({
1010
children,
1111
...props
1212
}: TDefaultRendererProps<TText>) => {
1313
const { tnode } = props;
14-
return React.createElement(
15-
TDefaultTextualRenderer,
16-
props,
17-
children ?? tnode.data
18-
);
14+
return renderTextualContent(props, children ?? tnode.data);
1915
};
2016

2117
function TStandardTextRenderer(props: TNodeSubRendererProps<TText>) {

packages/render-html/src/hooks/useInternalRenderer.ts

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
import { TagName } from '@native-html/transient-render-engine';
22
import { ComponentType } from 'react';
3-
import AElement from '../elements/AElement';
43
import IMGElement from '../elements/IMGElement';
54
import OLElement from '../elements/OLElement';
65
import ULElement from '../elements/ULElement';
@@ -25,7 +24,7 @@ const specialRenderersConfig = {
2524
},
2625
a: {
2726
hook: useAElementProps,
28-
Element: AElement
27+
Element: undefined
2928
}
3029
};
3130

@@ -64,7 +63,7 @@ export default function useInternalRenderer<T extends TagName>(
6463
const { TDefaultRenderer, ...rendererProps } = props;
6564
if (hasSpecialInternalRenderer(tagName)) {
6665
return {
67-
Renderer: specialRenderersConfig[tagName].Element,
66+
Renderer: specialRenderersConfig[tagName].Element || TDefaultRenderer,
6867
rendererProps: specialRenderersConfig[tagName].hook(props as any)
6968
} as any;
7069
}
Lines changed: 13 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,18 @@
1-
import React from 'react';
1+
import React, { ReactNode } from 'react';
22
import { Text } from 'react-native';
33
import { TPhrasing, TText } from '@native-html/transient-render-engine';
4-
import { TDefaultRenderer } from './shared-types';
4+
import { TDefaultRendererProps } from './shared-types';
55

6-
const TDefaultTextualRenderer: TDefaultRenderer<TPhrasing | TText> = ({
7-
tnode,
8-
style,
9-
children,
10-
textProps,
11-
nativeProps,
12-
onPress
13-
}) => {
6+
const renderTextualContent = (
7+
{
8+
tnode,
9+
style,
10+
textProps,
11+
nativeProps,
12+
onPress
13+
}: TDefaultRendererProps<TPhrasing | TText>,
14+
children: ReactNode
15+
) => {
1416
const resolvedStyles = [style, nativeProps?.style, textProps.style];
1517
return React.createElement(
1618
Text,
@@ -26,4 +28,4 @@ const TDefaultTextualRenderer: TDefaultRenderer<TPhrasing | TText> = ({
2628
);
2729
};
2830

29-
export default TDefaultTextualRenderer;
31+
export default renderTextualContent;

0 commit comments

Comments
 (0)