perf(Empty): avoid network icon re-render

This commit is contained in:
chenjiahan 2020-09-02 15:39:58 +08:00
parent f2c151c337
commit 8e073fc55c
2 changed files with 109 additions and 126 deletions

View File

@ -1,125 +1,108 @@
export default { const renderStop = (color, offset, opacity) => (
render() { <stop stop-color={color} offset={`${offset}%`} stop-opacity={opacity} />
const genStop = (color, offset, opacity) => ( );
<stop stop-color={color} offset={`${offset}%`} stop-opacity={opacity} />
);
return ( export const Network = (
<svg viewBox="0 0 160 160" xmlns="http://www.w3.org/2000/svg"> <svg viewBox="0 0 160 160" xmlns="http://www.w3.org/2000/svg">
<defs> <defs>
<linearGradient id="c" x1="64.022%" y1="100%" x2="64.022%" y2="0%"> <linearGradient id="c" x1="64.022%" y1="100%" x2="64.022%" y2="0%">
{genStop('#FFF', 0, 0.5)} {renderStop('#FFF', 0, 0.5)}
{genStop('#F2F3F5', 100)} {renderStop('#F2F3F5', 100)}
</linearGradient> </linearGradient>
<linearGradient id="d" x1="64.022%" y1="96.956%" x2="64.022%" y2="0%"> <linearGradient id="d" x1="64.022%" y1="96.956%" x2="64.022%" y2="0%">
{genStop('#F2F3F5', 0, 0.3)} {renderStop('#F2F3F5', 0, 0.3)}
{genStop('#F2F3F5', 100)} {renderStop('#F2F3F5', 100)}
</linearGradient> </linearGradient>
<linearGradient id="h" x1="50%" y1="0%" x2="50%" y2="84.459%"> <linearGradient id="h" x1="50%" y1="0%" x2="50%" y2="84.459%">
{genStop('#EBEDF0', 0)} {renderStop('#EBEDF0', 0)}
{genStop('#DCDEE0', 100, 0)} {renderStop('#DCDEE0', 100, 0)}
</linearGradient> </linearGradient>
<linearGradient id="i" x1="100%" y1="0%" x2="100%" y2="100%"> <linearGradient id="i" x1="100%" y1="0%" x2="100%" y2="100%">
{genStop('#EAEDF0', 0)} {renderStop('#EAEDF0', 0)}
{genStop('#DCDEE0', 100)} {renderStop('#DCDEE0', 100)}
</linearGradient> </linearGradient>
<linearGradient id="k" x1="100%" y1="100%" x2="100%" y2="0%"> <linearGradient id="k" x1="100%" y1="100%" x2="100%" y2="0%">
{genStop('#EAEDF0', 0)} {renderStop('#EAEDF0', 0)}
{genStop('#DCDEE0', 100)} {renderStop('#DCDEE0', 100)}
</linearGradient> </linearGradient>
<linearGradient id="m" x1="0%" y1="43.982%" x2="100%" y2="54.703%"> <linearGradient id="m" x1="0%" y1="43.982%" x2="100%" y2="54.703%">
{genStop('#EAEDF0', 0)} {renderStop('#EAEDF0', 0)}
{genStop('#DCDEE0', 100)} {renderStop('#DCDEE0', 100)}
</linearGradient> </linearGradient>
<linearGradient <linearGradient id="n" x1="94.535%" y1="43.837%" x2="5.465%" y2="54.948%">
id="n" {renderStop('#EAEDF0', 0)}
x1="94.535%" {renderStop('#DCDEE0', 100)}
y1="43.837%" </linearGradient>
x2="5.465%" <radialGradient
y2="54.948%" id="g"
> cx="50%"
{genStop('#EAEDF0', 0)} cy="0%"
{genStop('#DCDEE0', 100)} fx="50%"
</linearGradient> fy="0%"
<radialGradient r="100%"
id="g" gradientTransform="matrix(0 1 -.54835 0 .5 -.5)"
cx="50%" >
cy="0%" {renderStop('#EBEDF0', 0)}
fx="50%" {renderStop('#FFF', 100, 0)}
fy="0%" </radialGradient>
r="100%" </defs>
gradientTransform="matrix(0 1 -.54835 0 .5 -.5)" <g fill="none" fill-rule="evenodd">
> <g opacity=".8">
{genStop('#EBEDF0', 0)} <path
{genStop('#FFF', 100, 0)} d="M0 124V46h20v20h14v58H0z"
</radialGradient> fill="url(#c)"
</defs> transform="matrix(-1 0 0 1 36 7)"
<g fill="none" fill-rule="evenodd"> />
<g opacity=".8"> <path
<path d="M40.5 5a8.504 8.504 0 018.13 6.009l.12-.005L49 11a8 8 0 11-1 15.938V27H34v-.174a6.5 6.5 0 11-1.985-12.808A8.5 8.5 0 0140.5 5z"
d="M0 124V46h20v20h14v58H0z" fill="url(#d)"
fill="url(#c)" transform="translate(2 7)"
transform="matrix(-1 0 0 1 36 7)" />
/> <path
<path d="M96.016 0a4.108 4.108 0 013.934 2.868l.179-.004c2.138 0 3.871 1.71 3.871 3.818 0 2.109-1.733 3.818-3.871 3.818-.164 0-.325-.01-.484-.03v.03h-6.774v-.083a3.196 3.196 0 01-.726.083C90.408 10.5 89 9.111 89 7.398c0-1.636 1.284-2.976 2.911-3.094a3.555 3.555 0 01-.008-.247c0-2.24 1.842-4.057 4.113-4.057z"
d="M40.5 5a8.504 8.504 0 018.13 6.009l.12-.005L49 11a8 8 0 11-1 15.938V27H34v-.174a6.5 6.5 0 11-1.985-12.808A8.5 8.5 0 0140.5 5z" fill="url(#d)"
fill="url(#d)" transform="translate(2 7)"
transform="translate(2 7)" />
/> <path
<path d="M121 8h22.231v14H152v77.37h-31V8z"
d="M96.016 0a4.108 4.108 0 013.934 2.868l.179-.004c2.138 0 3.871 1.71 3.871 3.818 0 2.109-1.733 3.818-3.871 3.818-.164 0-.325-.01-.484-.03v.03h-6.774v-.083a3.196 3.196 0 01-.726.083C90.408 10.5 89 9.111 89 7.398c0-1.636 1.284-2.976 2.911-3.094a3.555 3.555 0 01-.008-.247c0-2.24 1.842-4.057 4.113-4.057z" fill="url(#c)"
fill="url(#d)" transform="translate(2 7)"
transform="translate(2 7)" />
/> </g>
<path <path fill="url(#g)" d="M0 139h160v21H0z" />
d="M121 8h22.231v14H152v77.37h-31V8z" <path
fill="url(#c)" d="M37 18a7 7 0 013 13.326v26.742c0 1.23-.997 2.227-2.227 2.227h-1.546A2.227 2.227 0 0134 58.068V31.326A7 7 0 0137 18z"
transform="translate(2 7)" fill="url(#h)"
/> fill-rule="nonzero"
</g> transform="translate(43 36)"
<path fill="url(#g)" d="M0 139h160v21H0z" /> />
<path <g opacity=".6" stroke-linecap="round" stroke-width="7">
d="M37 18a7 7 0 013 13.326v26.742c0 1.23-.997 2.227-2.227 2.227h-1.546A2.227 2.227 0 0134 58.068V31.326A7 7 0 0137 18z" <path
fill="url(#h)" d="M20.875 11.136a18.868 18.868 0 00-5.284 13.121c0 5.094 2.012 9.718 5.284 13.12"
fill-rule="nonzero" stroke="url(#i)"
transform="translate(43 36)" transform="translate(43 36)"
/> />
<g opacity=".6" stroke-linecap="round" stroke-width="7"> <path
<path d="M9.849 0C3.756 6.225 0 14.747 0 24.146c0 9.398 3.756 17.92 9.849 24.145"
d="M20.875 11.136a18.868 18.868 0 00-5.284 13.121c0 5.094 2.012 9.718 5.284 13.12" stroke="url(#i)"
stroke="url(#i)" transform="translate(43 36)"
transform="translate(43 36)" />
/> <path
<path d="M57.625 11.136a18.868 18.868 0 00-5.284 13.121c0 5.094 2.012 9.718 5.284 13.12"
d="M9.849 0C3.756 6.225 0 14.747 0 24.146c0 9.398 3.756 17.92 9.849 24.145" stroke="url(#k)"
stroke="url(#i)" transform="rotate(-180 76.483 42.257)"
transform="translate(43 36)" />
/> <path
<path d="M73.216 0c-6.093 6.225-9.849 14.747-9.849 24.146 0 9.398 3.756 17.92 9.849 24.145"
d="M57.625 11.136a18.868 18.868 0 00-5.284 13.121c0 5.094 2.012 9.718 5.284 13.12" stroke="url(#k)"
stroke="url(#k)" transform="rotate(-180 89.791 42.146)"
transform="rotate(-180 76.483 42.257)" />
/> </g>
<path <g transform="translate(31 105)" fill-rule="nonzero">
d="M73.216 0c-6.093 6.225-9.849 14.747-9.849 24.146 0 9.398 3.756 17.92 9.849 24.145" <rect fill="url(#m)" width="98" height="34" rx="2" />
stroke="url(#k)" <rect fill="#FFF" x="9" y="8" width="80" height="18" rx="1.114" />
transform="rotate(-180 89.791 42.146)" <rect fill="url(#n)" x="15" y="12" width="18" height="6" rx="1.114" />
/> </g>
</g> </g>
<g transform="translate(31 105)" fill-rule="nonzero"> </svg>
<rect fill="url(#m)" width="98" height="34" rx="2" /> );
<rect fill="#FFF" x="9" y="8" width="80" height="18" rx="1.114" />
<rect
fill="url(#n)"
x="15"
y="12"
width="18"
height="6"
rx="1.114"
/>
</g>
</g>
</svg>
);
},
};

View File

@ -1,5 +1,5 @@
import { createNamespace } from '../utils'; import { createNamespace } from '../utils';
import Network from './Network'; import { Network } from './Network';
const [createComponent, bem] = createNamespace('empty'); const [createComponent, bem] = createNamespace('empty');
@ -23,7 +23,7 @@ export default createComponent({
let { image } = props; let { image } = props;
if (image === 'network') { if (image === 'network') {
return <Network />; return Network;
} }
if (PRESET_IMAGES.indexOf(image) !== -1) { if (PRESET_IMAGES.indexOf(image) !== -1) {