1- import React , { type PropsWithChildren } from 'react' ;
1+ import React , { type PropsWithChildren , useMemo } from 'react' ;
22import { Platform , Text } from 'react-native' ;
33
44import './prism-config' ;
@@ -22,19 +22,13 @@ import { MarkdownReactiveScrollView } from '../components';
2222
2323const DEFAULT_FONT_SIZE = 13 ;
2424
25- // TODO: Just do useMemo, there's no real need for this type of caching.
26- const styleCache = new Map ( ) ;
27-
2825const generateNewStylesheet = ( {
2926 stylesheet,
3027 highlighter,
3128} : {
3229 stylesheet : SyntaxHighlighterStylesheet ;
3330 highlighter : NativeSyntaxHighlighterProps [ 'highlighter' ] ;
3431} ) => {
35- if ( styleCache . has ( stylesheet ) ) {
36- return styleCache . get ( stylesheet ) ;
37- }
3832 stylesheet = Array . isArray ( stylesheet ) ? stylesheet [ 0 ] : stylesheet ;
3933
4034 const transformedStyle = Object . entries ( stylesheet ?? { } ) . reduce < RNSheet > (
@@ -55,7 +49,6 @@ const generateNewStylesheet = ({
5549
5650 const defaultColor = ( topLevel && topLevel . color ) || '#000' ;
5751
58- styleCache . set ( stylesheet , { transformedStyle, defaultColor } ) ;
5952 return { transformedStyle, defaultColor } ;
6053} ;
6154
@@ -171,24 +164,35 @@ const NativeSyntaxHighlighter = ({
171164 CodeTag = MarkdownReactiveScrollView ,
172165 ...rest
173166} : PropsWithChildren < NativeSyntaxHighlighterProps > ) => {
174- const { transformedStyle, defaultColor } = generateNewStylesheet ( {
175- stylesheet : style ,
176- highlighter,
177- } ) ;
167+ const { transformedStyle, defaultColor } = useMemo (
168+ ( ) =>
169+ generateNewStylesheet ( {
170+ stylesheet : style ,
171+ highlighter,
172+ } ) ,
173+ [ highlighter , style ] ,
174+ ) ;
175+ const renderer = useMemo (
176+ ( ) =>
177+ nativeRenderer ( {
178+ defaultColor : defaultColor as string ,
179+ fontFamily,
180+ fontSize,
181+ } ) ,
182+ [ defaultColor , fontFamily , fontSize ] ,
183+ ) ;
184+
178185 const Highlighter =
179186 highlighter === 'prism' ? SyntaxHighlighterPrism : SyntaxHighlighter ;
187+
180188 return (
181189 < Highlighter
182190 PreTag = { PreTag }
183191 CodeTag = { CodeTag }
184192 { ...rest }
185- style = { transformedStyle }
193+ style = { transformedStyle as SyntaxHighlighterStylesheet }
186194 horizontal = { true }
187- renderer = { nativeRenderer ( {
188- defaultColor,
189- fontFamily,
190- fontSize,
191- } ) }
195+ renderer = { renderer }
192196 >
193197 { children }
194198 </ Highlighter >
0 commit comments