Skip to content

Commit fb89c96

Browse files
authored
Merge pull request #2283 from didi/perf-rn-image
perf: mpx-image 优化无用的createElement调用
2 parents 5ffea57 + 152a87b commit fb89c96

1 file changed

Lines changed: 40 additions & 34 deletions

File tree

  • packages/webpack-plugin/lib/runtime/components/react

packages/webpack-plugin/lib/runtime/components/react/mpx-image.tsx

Lines changed: 40 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -464,44 +464,50 @@ const Image = forwardRef<HandlerRef<RNImage, ImageProps>, ImageProps>((props, re
464464
}
465465
)
466466

467-
const SvgImage = createElement(
468-
View,
469-
innerProps,
470-
createElement(SvgCssUri, {
471-
uri: src,
472-
onLayout: onSvgLoad,
473-
onError: binderror && onSvgError,
474-
style: extendObject(
475-
{ transformOrigin: 'left top' },
476-
modeStyle
477-
)
478-
})
479-
)
480-
481-
const BaseImage = renderImage(
482-
extendObject(
483-
{
484-
source: { uri: src },
485-
resizeMode: resizeMode,
486-
onLoad: bindload && onImageLoad,
487-
onError: binderror && onImageError,
467+
function renderSvgImage () {
468+
return createElement(
469+
View,
470+
innerProps,
471+
createElement(SvgCssUri, {
472+
uri: src,
473+
onLayout: onSvgLoad,
474+
onError: binderror && onSvgError,
488475
style: extendObject(
489-
{
490-
transformOrigin: 'left top',
491-
width: isCropMode ? imageWidth : '100%',
492-
height: isCropMode ? imageHeight : '100%'
493-
},
494-
isCropMode ? modeStyle : {}
476+
{ transformOrigin: 'left top' },
477+
modeStyle
495478
)
496-
},
497-
isLayoutMode ? {} : innerProps
498-
),
499-
enableFastImage
500-
)
479+
})
480+
)
481+
}
501482

502-
const LayoutImage = createElement(View, innerProps, loaded && BaseImage)
483+
function renderBaseImage () {
484+
return renderImage(
485+
extendObject(
486+
{
487+
source: { uri: src },
488+
resizeMode: resizeMode,
489+
onLoad: bindload && onImageLoad,
490+
onError: binderror && onImageError,
491+
style: extendObject(
492+
{
493+
transformOrigin: 'left top',
494+
width: isCropMode ? imageWidth : '100%',
495+
height: isCropMode ? imageHeight : '100%'
496+
},
497+
isCropMode ? modeStyle : {}
498+
)
499+
},
500+
isLayoutMode ? {} : innerProps
501+
),
502+
enableFastImage
503+
)
504+
}
505+
506+
function renderLayoutImage () {
507+
return createElement(View, innerProps, loaded && renderBaseImage())
508+
}
503509

504-
const finalComponent = isSvg ? SvgImage : isLayoutMode ? LayoutImage : BaseImage
510+
const finalComponent = isSvg ? renderSvgImage() : isLayoutMode ? renderLayoutImage() : renderBaseImage()
505511

506512
if (hasPositionFixed) {
507513
return createElement(Portal, null, finalComponent)

0 commit comments

Comments
 (0)