React: SVG рдЯреИрдЧ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЧреБрдо рд╣реИрдВ

рдХреЛ рдирд┐рд░реНрдорд┐рдд 8 рдЬреВрди 2014  ┬╖  107рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ  ┬╖  рд╕реНрд░реЛрдд: facebook/react

рдЕрдиреБрд░рдХреНрд╖рдХреЛрдВ рд╕реЗ рдиреЛрдЯ: рд░рд┐рдПрдХреНрдЯ 15 рд╕реЗ рд╢реБрд░реВ рд╣реЛрдХрд░, рд╣рдореЗрдВ рдПрд╕рд╡реАрдЬреА рд╡рд┐рдирд┐рд░реНрджреЗрд╢реЛрдВ рдХреЗ рд╕рдмрд╕реЗрдЯ рдХрд╛ рдкреВрд░рд╛ рд╕рдорд░реНрдерди рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП рдЬреЛ рд╡рд╛рд╕реНрддрд╡ рдореЗрдВ рдмреНрд░рд╛рдЙрдЬрд╝рд░реЛрдВ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИред

рдпрджрд┐ рдЖрдкрдХреЛ рдХреЛрдИ рдЕрдиреБрдкрд▓рдмреНрдз рд╡рд┐рд╢реЗрд╖рддрд╛ рдорд┐рд▓рддреА рд╣реИ, рдпрд╛ рдпрджрд┐ рдХреЛрдИ рдЯреИрдЧ рдареАрдХ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рдиреАрдЪреЗ рдПрдХ рдЯрд┐рдкреНрдкрдгреА рд▓рд┐рдЦреЗрдВред рдзреНрдпрд╛рди рджреЗрдВ рдХрд┐ React.DOM.* рдлрд╝реИрдХреНрдЯрд░реА рдлрд╝рдВрдХреНрд╢рдВрд╕ рд╕рднреА рдЯреИрдЧ рдкреНрд░рджрд╛рди рдирд╣реАрдВ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рд▓рд╛рдкрддрд╛ рд▓реЛрдЧреЛрдВ рдХреЗ рд▓рд┐рдП React.createFactory рдпрд╛ React.createElement() рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдпрд╛ рдЖрдк рдХреЗрд╡рд▓ JSX рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ React.createElement() рдЕрдиреБрд╡рд╛рдж рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕реНрд╡рд╛рднрд╛рд╡рд┐рдХ рд░реВрдк рд╕реЗ рд╕рднреА рдЯреИрдЧ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рддрд╛ рд╣реИред

рд╕рдмрд╕реЗ рдЙрдкрдпреЛрдЧреА рдЯрд┐рдкреНрдкрдгреА

рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ xlink:href рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╛рдлреА рднреНрд░рдо рд╣реИред рдпрд╣ _is_ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реИ рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЗрд╕реЗ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛:

<use xlinkHref="#shape" x="50" y="50" />

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЗрд╕реЗ xlink:href рдореЗрдВ рдмрджрд▓ рджреЗрдЧреА, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ 0.14.x рдореЗрдВ рднреАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд╣реЗрд▓реА рджреЗрдЦреЗрдВред

рд╕рднреА 107 рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

рдХреЛрдИ рдЗрд╕ рдкрд░ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ? рдореИрдВ filter рдЯреИрдЧ рдХреЛ рд▓рд╛рдЧреВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЙрддреНрд╕реБрдХ рд╣реВрдВред

preserveAspectRatio рднреА рдЧрд╛рдпрдм рд▓рдЧрддрд╛ рд╣реИ: http://jsfiddle.net/jonase/kb3gN/3025/

рдХреНрдпрд╛ рдореБрдЭреЗ рдЗрд╕рдХреЗ рд▓рд┐рдП рдПрдХ рдкреАрдЖрд░ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рд┐рдП рдпрд╛ рдХреНрдпрд╛ рдЖрдк рдкрд╣рд▓реЗ рд╕рднреА рд▓рд╛рдкрддрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ/рдЯреИрдЧ рдХреЛ рдПрдХрддреНрд░ рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░рддреЗ рд╣реИрдВ рдФрд░ рдмрд╛рдж рдореЗрдВ рдПрдХ рд╣реА рдкреИрдЪ рдмрдирд╛рддреЗ рд╣реИрдВ?

[рд╕рдВрдкрд╛рджрд┐рдд рдХрд░реЗрдВ] PreserveAspectRatio рдХреЛ рдкреНрд░рддрд┐рдмрджреНрдз рдореЗрдВ рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рдерд╛ https://github.com/facebook/react/commit/0f0328f0930d7fcf0b92cde40b1d6966cd747054

рдирдорд╕реНрддреЗред

рдорд╛рд░реНрдХрд░* рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдКрдкрд░ рдмрддрд╛рдП рдЕрдиреБрд╕рд╛рд░ #1738 рдореЗрдВ @cassus рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж рдЬреЛрдбрд╝рд╛ рдЧрдпрд╛ рд╣реИред

рд╕рдВрдмрдВрдзрд┐рдд <marker> SVG рддрддреНрд╡ рдХреЛ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреНрдпрд╛?
https://developer.mozilla.org/en-US/docs/Web/SVG/Element/marker

рдореБрдЭреЗ рдЕрднреА рдПрд╣рд╕рд╛рд╕ рд╣реБрдЖ рдХрд┐ рдореБрдЭреЗ рднреА рдЗрд╕рдХреА рдЬрд╝рд░реВрд░рдд рд╣реИред рдпрд╣рд╛рдБ рдЗрд╕рдХрд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рдЕрд╡рд▓реЛрдХрди рд╣реИ: http://tutorials.jenkov.com/svg/marker-element.html

рдпрд╣ "рдпрд╣рд╛рдВ рдФрд░ рд╡рд╣рд╛рдВ рдПрдХ рдпрд╛рджреГрдЪреНрдЫрд┐рдХ рддрддреНрд╡ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛ рдЬреЛрдбрд╝реЗрдВ рдХреНрдпреЛрдВрдХрд┐ 1 рд╡реНрдпрдХреНрддрд┐ рдХреЛ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ" рджреГрд╖реНрдЯрд┐рдХреЛрдг рд╣рд╛рде рд╕реЗ рдирд┐рдХрд▓ рдЧрдпрд╛ рд╣реИред рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдпрд╛ рддреЛ рд╣рд░ рдЪреАрдЬ рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдпрд╛ рдХреБрдЫ рднреА рдирд╣реАрдВ (рдпрд╛ рд╡реИрдХрд▓реНрдкрд┐рдХ рд░реВрдк рд╕реЗ рдЪреАрдЬреЛрдВ рдХрд╛ рдПрдХ рдЙрдЪрд┐рдд рд╕реЗрдЯ рдЕрднреА рдЬреЛрдбрд╝реЗрдВ рдФрд░ рдлрд┐рд░ рд╡рд╣рд╛рдВ рдлреНрд░реАрдЬ рдХрд░реЗрдВ)ред

рдореИрдВрдиреЗ _almost_ рд╕рдм рдХреБрдЫ рдХреЗ рд▓рд┐рдП http://www.w3.org/TR/2003/REC-SVG11-20030114/attindex.html рд╕реНрдХреНрд░реИрдк рдХрд┐рдпрд╛ рдФрд░ рдЗрд╕рдХреЗ рд╕рд╛рде рдЖрдпрд╛: https://github.com/zpao/ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛/рддреБрд▓рдирд╛/рдмрдХрд╡рд╛рд╕-svg.

рд╣рд╛рд▓рд╛рдБрдХрд┐, рдпрд╣ рд╣рдорд╛рд░реЗ рдорд┐рдиреАрдлрд╛рдЗрдб рдмрд┐рд▓реНрдб рдореЗрдВ ~ 2kb рдЬреЛрдбрд╝рддрд╛ рд╣реИ (рд╣рд╛рд▓рд╛рдБрдХрд┐ рдпрд╣ рдХреНрд▓реЛрдЬрд░ рдХрдВрдкрд╛рдЗрд▓рд░ рдХреЗ рд╕рд╛рде рдЕрдЪреНрдЫреА рддрд░рд╣ рд╕реЗ рдХреНрд░рд╢ рд╣реЛ рдЬрд╛рдПрдЧрд╛) рдФрд░ рдореИрдВ рдЕрднреА рдЙрд╕ рдЖрдХрд╛рд░ рдореЗрдВ рд╡реГрджреНрдзрд┐ рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ред рд╣рдордиреЗ рдПрдХ рдЕрд▓рдЧ SVG рдмрд┐рд▓реНрдб рдХрд░рдиреЗ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд╛рдд рдХреА рд╣реИред рдпрд╛ рд╢рд┐рдкрд┐рдВрдЧ рдХрд┐ рдЕрд▓рдЧ рд╕реЗ рдПрдХ рдРрдбрдСрди рдХреЗ рд░реВрдк рдореЗрдВред

@zpao рддреБрдо рд╕рд╣реА рд╣реЛред рдкреВрд░реНрдг SVG рд╕рдорд░реНрдерди рдПрдХ рдРрдбрдСрди рд╣реЛ рд╕рдХрддрд╛ рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд░рд┐рдПрдХреНрдЯ рдХреА рддреБрд▓рдирд╛ рдореЗрдВ рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рд╕реВрдЪрд┐рдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рдореВрд▓реНрдпрд╣реНрд░рд╛рд╕ рдЪреЗрддрд╛рд╡рдиреА рд╕реЗрдЯ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред DOM.circle React.SVG.circle рдмрди рдЬрд╛рдПрдЧрд╛

React.SVG.circle рдХреЗ рд▓рд┐рдП +1

@zpao
рдПрдХ рдкреВрд░реНрдг рдПрд╕рд╡реАрдЬреА рдРрдб-рдСрди рдПрдХ рдЕрдЪреНрдЫреЗ рджреГрд╖реНрдЯрд┐рдХреЛрдг рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред рдХрдИ рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЛ рдХрд┐рд╕реА рдПрд╕рд╡реАрдЬреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реЛрддреА рд╣реИ, рдЗрд╕рд▓рд┐рдП рд╣рдореЗрдВ рдЙрдирдХреЗ рд▓рд┐рдП рдХреЛрдб рдХреЛ рдХрдо рдирд╣реАрдВ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред рдЕрдиреНрдп рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреА рдЬрд░реВрд░рдд рд╣реИ рдФрд░ рдпрд╣ рдХреЗрд╡рд▓ рд╕рдорд░реНрдерди рдкрд░ рдЖрдзреЗ рд░рд╛рд╕реНрддреЗ рдкрд░ рдЬрд╛рдиреЗ рдХрд╛ рдХреЛрдИ рдорддрд▓рдм рдирд╣реАрдВ рд╣реИред

+1

2069 рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рддрд╛ рд╣реИред

рдЫрд╡рд┐ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП +1

рдЫрд╡рд┐ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рднреА +1

<use> рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП +1ред рд╣рдо рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЕрдкрдиреЗ svg рдЖрдЗрдХрди рд╕реЗрдЯ рдХреЗ рд▓рд┐рдП рдХрд░ рд░рд╣реЗ рд╣реИрдВред рд╣рдо рдЗрд╕реЗ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП dangerouslySetHTML рдХрд░рдиреЗ рдХреА рдХреЛрд╢рд┐рд╢ рдХрд░ рд░рд╣реЗ рд╣реИрдВ, рд╣рд╛рд▓рд╛рдВрдХрд┐, рдЗрд╡реЗрдВрдЯ рдмрдмрд▓рд┐рдВрдЧ рдЗрд╕рдХреЗ рд╕рд╛рде рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИред

strokeDashoffset рдЧреБрдо рд╣реИред рдореИрдВ рдЗрд╕реЗ рдкреНрд░рдЧрддрд┐ рдкрдЯреНрдЯреА рдХреЗ рд▓рд┐рдП рдЗрд╕ рддрд░рд╣ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддрд╛ рд╣реВрдВ: http://codepen.io/JMChristensen/pen/Ablch

strokeDashoffset рд▓рд┐рдП +1

рдЗрд╕реЗ рдкреНрд░рдЧрддрд┐ рдкрдЯреНрдЯреА рдХреЗ рд▓рд┐рдП рднреА рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВред

рдореБрдЭреЗ рдпрд╛рдж рдЖ рд░рд╣реА alignment-baseline рдЬрдм рд╕рд╛рде рдХрд╛рдо рдХрд░ <text>

рд╢рд╛рдпрдж рдХрд┐рд╕реА рдХреЗ рдкрд╛рд╕ http://www.w3.org/TR/SVG/Overview.html рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдЯреНрд░реИрд╡реЗрд▓ рдХрд░рдиреЗ рдФрд░ рд╕рднреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдФрд░ рдЧреБрдгреЛрдВ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЗрдЪреНрдЫрд╛рд╢рдХреНрддрд┐ рд╣реИ? (рдЗрд╕ рдЙрджреНрджреЗрд╢реНрдп рдХреЗ рд▓рд┐рдП рдПрдХ рдмреЗрд╣рддрд░ рдпреВрдЖрд░рдПрд▓ рд╣реЛ рд╕рдХрддрд╛ рд╣реИ, рдирд┐рд╢реНрдЪрд┐рдд рдирд╣реАрдВ ...)

рдПрдХ рдФрд░ рдорджрдж рдпрд╣ рдЬрд╛рдирдирд╛ рд╣реЛрдЧрд╛ рдХрд┐ рдЗрд╕реЗ рд╕реНрд░реЛрдд-рдХреЛрдб рдФрд░ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рдХрд╣рд╛рдВ рдмрджрд▓рдирд╛ рд╣реИ рддрд╛рдХрд┐ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдмрджреНрдз рд╣реЛрдирд╛ рдЖрд╕рд╛рди рд╣реЛред

FWIW, рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЕрднреА рднреА рд╢реИрд▓реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓рд╛рдЧреВ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред

<path style={{strokeDashoffset: 100}} />

@syranide рдореИрдВрдиреЗ рдРрд╕рд╛ рдХрд┐рдпрд╛ (рдЬреНрдпрд╛рджрд╛рддрд░ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдХреНрдпреЛрдВрдХрд┐ рдпрд╣ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд╛рдЧрд▓рдкрди рд╣реЛрдЧрд╛) - https://github.com/zpao/react/compare/fuck-svgред рдореЗрд░реА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рджреЗрдЦреЗрдВ рдХрд┐ рдпрд╣ рдкрд╣рд▓реЗ рд╕реЗ рд╣реА рд╡рд┐рд▓рдп рдХреНрдпреЛрдВ рдирд╣реАрдВ рд╣реИред

@ThomasDeutsch рдкрд┐рдЫрд▓реЗ SVG рд╕рдВрдмрдВрдзрд┐рдд рдкреБрд▓ рдЕрдиреБрд░реЛрдзреЛрдВ рдореЗрдВ рд╕реЗ рдЕрдзрд┐рдХрд╛рдВрд╢ рджреЗрдЦреЗрдВред рдЙрд╕ рдиреЗ рдХрд╣рд╛, рдореИрдВ рдЙрдиреНрд╣реЗрдВ рдПрдХ-рдПрдХ рдХрд░рдХреЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рдмрдЬрд╛рдп рдПрдХ рдпреЛрдЬрдирд╛ рдХрд╛ рдкрддрд╛ рд▓рдЧрд╛рдКрдВрдЧрд╛ (рдореИрдВ рдЖрдкрдХреЛ рдЕрдкрдиреА рдкрд┐рдЫрд▓реА рдЯрд┐рдкреНрдкрдгреА рдкрд░ рднреА рдирд┐рд░реНрджреЗрд╢рд┐рдд рдХрд░реВрдВрдЧрд╛)ред

рдЯреЗрдХреНрд╕реНрдЯрдкрд╛рде рдХреЗ рд▓рд┐рдП +1 - рдореБрдЭреЗ рдЙрд╕ рдкреНрд░реЛрдЬреЗрдХреНрдЯ рдХреЗ рд▓рд┐рдП рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕ рдкрд░ рдореИрдВ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рдФрд░ рдЕрднреА рдореИрдВ рдПрдХ рдмреБрд░рд╛ рд╕рдорд╛рдзрд╛рди рд╣реИрдХ рдХрд░ рд░рд╣рд╛ рд╣реВрдВред рдореБрдЭреЗ рд░рд┐рдПрдХреНрдЯ рдПрд╕рд╡реАрдЬреА рдкреНрд▓рдЧрдЗрди рдкреИрдХ рдХреЗ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рдпрди рдореЗрдВ рдпреЛрдЧрджрд╛рди рдХрд░рдиреЗ рдореЗрдВ рдЦреБрд╢реА рд╣реЛрдЧреА

:+1: рдкреВрд░реНрдг рдПрд╕рд╡реАрдЬреА рдРрдб-рдСрди рдХреЗ рд▓рд┐рдПред рдХреЛрдИ рдЕрдиреБрдорд╛рди рд╣реИ рдХрд┐ рдпрд╣ рдХрдм рд╢рд┐рдк рд╣реЛрдЧрд╛?

рд╡рд┐рджреЗрд╢реА рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП +1

рд╡рд┐рджреЗрд╢реА рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП +1

рд╡рд┐рд╢реЗрд╖рддрд╛ xlink:href svg sprites рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдПред

<use> рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП +1

рдЗрд╕рдХреЗ рд▓рд┐рдП рд╡рд░реНрддрдорд╛рди рдореЗрдВ https://www.npmjs.org/package/react-inlinesvg рдПрдХ

рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ: рдорд╛рд╕реНрдХрдЗрдХрд╛рдЗрдпрд╛рдБ рдФрд░ рдорд╛рд╕реНрдХ рд╕рд╛рдордЧреНрд░реА рдЗрдХрд╛рдЗрдпрд╛рдБ (# 2056)

рдореБрдЦреМрдЯрд╛ рд╡рд┐рд╢реЗрд╖рддрд╛ #2535

patternTransform

рдЯреЗрдХреНрд╕реНрдЯ рд╡рд┐рд╢реЗрд╖рддрд╛ text-anchor

рдЯреЗрдХреНрд╕реНрдЯрдкрд╛рде рдХреЗ рд▓рд┐рдП +1

svg рдЖрдЗрдХрди рд╣реИрдВрдбрд▓рд┐рдВрдЧ рдХреЗ рд▓рд┐рдП <use> рд▓рд┐рдП +1ред

рдПрдХ рдПрд╕рд╡реАрдЬреА рдРрдб-рдСрди рдХреЗ рд▓рд┐рдП +1ред рдореБрдЭреЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдХреЗрд╡рд▓ рдПрдХ рдкрд░рд┐рдпреЛрдЬрдирд╛ рдХреЗ рд▓рд┐рдП <clipPath> , рд▓реЗрдХрд┐рди рдХреМрди рдЬрд╛рдирддрд╛ рд╣реИ рдХрд┐ рдореБрдЭреЗ рднрд╡рд┐рд╖реНрдп рдореЗрдВ рдХреНрдпрд╛ рдЪрд╛рд╣рд┐рдПред рдПрдХ рд╡реНрдпрд╛рдкрдХ рдРрдб-рдСрди рдмрд╣реБрдд рдорджрджрдЧрд╛рд░ рд╣реЛрдЧрд╛ред

рдРрдб-рдСрди рдХреЗ рд▓рд┐рдП +1ред

рд╣рдо рд░рд┐рдПрдХреНрдЯ рдХреЗ рд╕рд╛рде рдПрд╕рд╡реАрдЬреА рдХрд╛ рд╡реНрдпрд╛рдкрдХ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рдмрдирд╛ рд░рд╣реЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдорд╛рд░реЗ рдЬреИрд╕реА рдкрд░рд┐рдпреЛрдЬрдирд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдПрдХ рдкреВрд░реНрдг рдПрд╕рд╡реАрдЬреА рдРрдб-рдСрди рдПрдХ рдорд╣рд╛рди рд╡рд┐рдЪрд╛рд░ рдХреА рддрд░рд╣ рд▓рдЧрддрд╛ рд╣реИред

рдЯреЗрдХреНрд╕реНрдЯрдкрд╛рде рдХреЗ рд▓рд┐рдП +1 рдФрд░ рд╕рд╛рдорд╛рдиреНрдп рд░реВрдк рд╕реЗ рдЕрдзрд┐рдХ рдкреВрд░реНрдг svg рд╕рдорд░реНрдердиред

рдЬрдм рддрдХ рдПрд╕рд╡реАрдЬреА рдкреВрд░реА рддрд░рд╣ рд╕реЗ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ, рддрдм рддрдХ рд░рд┐рдПрдХреНрдЯ рдХреЛ рдпрд╣ рдмрддрд╛рдирд╛ рдПрдХ рдЕрдЪреНрдЫрд╛ рд╕рдорд╛рдзрд╛рди рд╣реИ рдХрд┐ рдЖрдкрдХреЛ рдХрд┐рди рдПрд╕рд╡реАрдЬреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдФрд░ рдЙрди рддрддреНрд╡реЛрдВ рдХреЛ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдШреЛрд╖рд┐рдд рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдП рдЬрд┐рдирдХреА рдЖрдкрдХреЛ рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП, <use> рдХреЛ рдЗрд╕ рддрд░рд╣ рдПрдХреНрд╕реЗрд╕ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ:

var DOMProperty = require('react/lib/DOMProperty');

// xlink:href is not a standardly-supported svg attribute, but you can tell
// React that it is ok.
DOMProperty.injection.injectDOMPropertyConfig({
  isCustomAttribute: function (attributeName) {
    return (attributeName === 'xlink:href');
  }
});

var SvgButton = React.createClass({
  render: function render() {
    var use = React.createElement('use', {
      'xlink:href': '#' + this.props.icon
    });
    return (
      <button>
        <svg>
          { use }
        </svg>
        <div>{ this.props.label }</div>
      </button>
    );
 });

@jeffkole рдРрд╕рд╛ рдХрд░рддреЗ рд╕рдордп рд╕рд╛рд╡рдзрд╛рди рд░рд╣реЗрдВ - рдпрджрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рдмрджрд▓ рдЬрд╛рддреА рд╣реИ, рддреЛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдЕрднреА рднреА setAttribute (setAttributeNS рдирд╣реАрдВ) рдХреЛ рдХреЙрд▓ рдХрд░реЗрдЧреА, рдФрд░ рдЕрдкрдбреЗрдЯ рд╢рд╛рдпрдж рдареАрдХ рд╕реЗ рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

@spicyj рдореБрдЭреЗ рд░рд┐рдПрдХреНрдЯ рдореЗрдВ рдХреЛрдИ рдиреЗрдорд╕реНрдкреЗрд╕ рд╕рдкреЛрд░реНрдЯ рдирд╣реАрдВ рджрд┐рдЦ рд░рд╣рд╛ рд╣реИ (рдпрд╛рдиреА, рдХреЛрдбрдмреЗрд╕ рдореЗрдВ setAttributeNS рдХреЛрдИ рдХреЙрд▓ рдирд╣реАрдВ рд╣реИ)ред рдирд╛рдорд╕реНрдерд╛рди рдХреЗ рд╕рд╛рде рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕реЗрдЯ рдХрд░рдиреЗ рдХреЗ рдЙрдЪрд┐рдд рддрд░реАрдХреЗ рдкрд░ рдХреЛрдИ рд╕реБрдЭрд╛рд╡?

рд╣рдореЗрдВ рдкрддрд╛ рдирд╣реАрдВ рдЪрд▓рд╛ рд╣реИ рдХрд┐ рдиреЗрдорд╕реНрдкреЗрд╕реНрдб рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░реЗрдВрдЧреА рдФрд░ рдЕрднреА рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рддреА рд╣реИрдВ, рдХреНрд╖рдорд╛ рдХрд░реЗрдВред

vector-effect рдЕрдЪреНрдЫрд╛ рд░рд╣реЗрдЧрд╛ред рдХреНрдпрд╛ рдЗрд╕рдХреЗ рдмрд┐рдирд╛ рдирд┐рд╢реНрдЪрд┐рдд рдЪреМрдбрд╝рд╛рдИ рд╡рд╛рд▓реЗ рд╕реНрдЯреНрд░реЛрдХ рд░рдЦрдиреЗ рдХрд╛ рдХреЛрдИ рдФрд░ рддрд░реАрдХрд╛ рд╣реИ рдЬрд┐рд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рдЗрд╕ рдмреАрдЪ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рд╡рд┐рджреЗрд╢реА рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП +1

рдЯреЗрдХреНрд╕реНрдЯ рдмреЗрд╕рд▓рд╛рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рдмрд╕ рдореЗрд░реЗ рдкреАрдЖрд░ рдХреЛ рд╕рдВрджрд░реНрднрд┐рдд рдХрд░рдирд╛: #2697

рдУрд╣ рд╢рд┐рдЯ рдореБрдЭреЗ use рдЯреИрдЧ рдЪрд╛рд╣рд┐рдП: рдирд┐рд░рд╛рд╢:

рдореИрдВрдиреЗ рдПрдХ рдХрд╕реНрдЯрдо рдШрдЯрдХ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЦреБрдж рдХреЛ рдЗрд╕реНрддреАрдлрд╛ рджреЗ рджрд┐рдпрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рд░реЗрдВрдбрд░ рдлрд╝рдВрдХреНрд╢рди рд╣реИ рдЬреЛ рд▓реМрдЯрд╛рддрд╛ рд╣реИ

<svg dangerouslySetInnerHTML={{ __html: '<use xlink:href="#' + this.props.icon + '"/>' }} />

рдпрд╣ рдмрджрд╕реВрд░рдд рд╣реИ, рд▓реЗрдХрд┐рди рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИред

:+1: рдЗрд╕ рдкрд░

Addons рдореЗрдВ рдкреВрд░реНрдг svg рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП +1 рдЪрд╛рд▓реВ рдХрд░реЗрдВ

:+1:

@zpao @spicyj рдЗрди рд╡реНрдпрдХреНрддрд┐рдЧрдд рдПрд╕рд╡реАрдЬреА рддрддреНрд╡реЛрдВ рдХреЛ рдмрдВрджрд░-рдкреИрдЪрд┐рдВрдЧ ReactDOM рдФрд░ SVGDOMPropertyConfig рдмрд┐рдирд╛ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдПрдХ рд╕рдорд░реНрдерд┐рдд рддрд░реАрдХрд╛ рд╣реИ?

рдирд╣реАрдВ, рдорд╛рдл рдХрд░рд┐рдПред

рдЫрд╡рд┐ рдФрд░ рд╡рд┐рджреЗрд╢реА рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП +1

рд╡рд┐рджреЗрд╢реА рд╡рд╕реНрддреБ рдХреЗ рд▓рд┐рдП +1

animate рдХрд╛рдо рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рдФрд░ рд╕рдВрднрд╡рддрдГ рдЗрд╕рдХреА рдХреБрдЫ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдВ: https://developer.mozilla.org/en-US/docs/Web/SVG/Element/animate

рдРрдбрдСрди рдореЗрдВ рдПрд╕рд╡реАрдЬреА рдХреЛ рд╕рдкреЛрд░реНрдЯ рдХрд░рдиреЗ рдХреА рд╕реНрдерд┐рддрд┐ рдХреНрдпрд╛ рд╣реИ? рдмрд╕ рдЖрдЬ рдЗрд╕рдореЗрдВ рднрд╛рдЧ рдЧрдпрд╛ :-(

cc @xymostech @MichelleTodd

рдирд╛рдорд╛рдВрдХрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП +1ред

Addons рдореЗрдВ рдкреВрд░реНрдг svg рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП +1 рдЪрд╛рд▓реВ рдХрд░реЗрдВ

+1000 рдПрд╕рд╡реАрдЬреА рд╡рд┐рд╢реЗрд╖рддрд╛ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП :-)

рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП +1рдЧреБрдг

рд╡рд┐рд╢реЗрд╖рддрд╛ "рднрд░рдиреЗ-рдирд┐рдпрдо" рдЬреЛрдбрд╝рдиреЗ рдХрд╛ рдЕрдиреБрд░реЛрдз, рд╢рд╛рдпрдж "рднрд░рдиреЗ рдХреЗ рдирд┐рдпрдо" рдХреЗ рд░реВрдк рдореЗрдВ

рдПрдХ рдПрд╕рд╡реАрдЬреА рдПрдбрдСрди рднреА рджреЗрдЦрдирд╛ рдЪрд╛рд╣реЗрдВрдЧреЗ: +1:

рд░рд┐рдПрдХреНрдЯ рдХреЛрд░ рдЯреАрдо, рдХреНрдпрд╛ рдЗрд╕ рдкрд░ рдкрд░рджреЗ рдХреЗ рдкреАрдЫреЗ рдХреЛрдИ рд╣рд▓рдЪрд▓/рдЪрд░реНрдЪрд╛ рд╣реИ?

рдЗрд╕ рдкрд░ рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдирд╣реАрдВ, рдмрд▓реНрдХрд┐ #3718, #3763 рджреЛрдиреЛрдВ рд╣реА SVG рдкрд░ рдХрд╛рдо рдХрд┐рдпрд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ рдФрд░ #3067 рднреА рдЗрд╕реА рд╡рд┐рд╢реЗрд╖рддрд╛ рдкрд░рд┐рд╡рд░реНрддрди рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИред

рдкреВрд░реНрдг рдПрд╕рд╡реАрдЬреА рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП +1ред рдРрд╕рд╛ рд╣реЛрдиреЗ рд╕реЗ рдкрд╣рд▓реЗ рдореБрдЭреЗ рдХрд╕реНрдЯрдо рдЯреИрдЧ рдФрд░ рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдмрдирд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдПрдХ рддрд░реАрдХреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдЧреАред рдХреНрдпрд╛ рдХреЛрдИ рдХреГрдкрдпрд╛ рдЗрд╕рдореЗрдВ рдореЗрд░реА рдорджрдж рдХрд░ рд╕рдХрддрд╛ рд╣реИ?

рдорд╛рд░реНрдХрд░ рддрддреНрд╡ рднреА рдЧрд╛рдпрдм рд╣реИ (https://developer.mozilla.org/en/docs/Web/SVG/Element/marker)

@ersagunkuruca рдЗрд╕ рдмреАрдЪ https://gist.github.com/akre54/80eaa63762ea499029f0 рдЖрдЬрд╝рдорд╛рдПрдВ

3945 рдорд╛рд░реНрдХрд░ рдХреЗ рд▓рд┐рдП рд░рд┐рдПрдХреНрдЯ рдПрд╕рд╡реАрдЬреА рдореЗрдВ рдпреЗ рдЯреИрдЧ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИрдВ: рд░реЗрдлрдХреНрд╕, рд░реЗрдлреА, рдУрд░рд┐рдПрдВрдЯ

:+1: рдорд╛рд░реНрдХрд░реЛрдВ рдХреЗ рд▓рд┐рдП!

рдПрд╕рд╡реАрдЬреА рд╕рднреА рдЪреАрдЬреЛрдВ рдХреЗ рд▓рд┐рдП +1ред

:+1

рдПрдирд┐рдореЗрдЯ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рдЧреБрдгреЛрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХреИрд╕реЗ?

<path
    d="M120 60c0-31.13-26.86-60-60-60">
    <animateTransform
          attributeName="transform"
          type="rotate"
          from="0 60 60"
          to="360 60 60"
          dur="1.5s"
          repeatCount="indefinite" />
</path>

рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдмрд╕ рдХреЗ рд╕рд╛рде рд╕рдорд╛рдкреНрдд рд╣реЛрддрд╛ рд╣реИ

<path d="M120 60c0-31.13-26.86-60-60-60" data-reactid=".0.0.0.1.6.0.0.$0.0.0.2">
    <animateTransform type="rotate" data-reactid=".0.0.0.1.6.0.0.$0.0.0.2.0"></animateTransform>
</path>

рдЫрд╡рд┐ рдХреЗ рд▓рд┐рдП +1

+рд╕рднреА рдПрд╕рд╡реАрдЬреА рд╕рдорд░реНрдерд┐рдд

рдлрд╝рд┐рд▓реНрдЯрд░ рдХреЗ рд▓рд┐рдП +1

рдЙрдкрдпреЛрдЧ рдХреЗ рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП +1!

рдирд╛рдорд╛рдВрдХрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП +1

+1 use рдФрд░ filter рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП рд╕рдорд░реНрдерди

<image> рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП +1ред рдореБрдЭреЗ рдПрдХ рдЗрдирд▓рд╛рдЗрди рдПрд╕рд╡реАрдЬреА рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ рдЬрд┐рд╕рдореЗрдВ рдПрдХ рдХреНрд▓рд┐рдкрд┐рдВрдЧ рдкрде рдХреЗ рдЕрдВрджрд░ рдПрдХ рдЫрд╡рд┐ рд╣реИ, рдФрд░ рдпрд╣ <svg> рдЯреИрдЧ рдореЗрдВ xmlns:xlink="http://www.w3.org/1999/xlink" attr рдкрд░ рд▓рдЯрдХрд╛ рд╣реБрдЖ рд╣реИред

filter рд▓рд┐рдП +1

@zpao рдХреА рдЯрд┐рдкреНрдкрдгреА рдХреЛ рдзреНрдпрд╛рди рдореЗрдВ рд░рдЦрддреЗ рд╣реБрдП, рдХреНрдпрд╛ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдмрдВрдж рдХрд░ рджреЗрдирд╛ рдЪрд╛рд╣рд┐рдП? рдпрд╛ рдХрдо рд╕реЗ рдХрдо, рдХреНрдпрд╛ рд╣рдо рдЙрд╕ рдЬрд╛рдирдХрд╛рд░реА рдХреЗ рд╕рд╛рде рдУрдкреА рдХреЛ рдЕрдкрдбреЗрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ? рдореИрдВрдиреЗ рдЕрдкрдбреЗрдЯ рдХреЗ рд▓рд┐рдП рдереНрд░реЗрдб рдХреА рд╕рджрд╕реНрдпрддрд╛ рд▓реА рд╣реИ рд▓реЗрдХрд┐рди @zpao рдХреА рдЯрд┐рдкреНрдкрдгреА рджрдлрди рд╣реИ (рдЗрд╕ рддрдереНрдп рдХреЗ рд╕рд╛рде рдХрд┐ рдХрд╛рдо рдкрд╣рд▓реЗ рд╣реА рд╣реЛ рдЪреБрдХрд╛ рд╣реИ) рдФрд░ рдпрд╣ рдХрд┐рд╕реА рдХреЗ рд▓рд┐рдП рднреА рднреНрд░рдорд┐рдд рдХрд░рдиреЗ рд╡рд╛рд▓рд╛ рд╣реИ рдЬрд┐рд╕рдиреЗ рдкреВрд░реЗ рдзрд╛рдЧреЗ рдХреЛ рдирд╣реАрдВ рдкрдврд╝рд╛ рд╣реИред

@zpao рдХреА рдЯрд┐рдкреНрдкрдгреА рдЗрд╕ рдирд┐рд░реНрдгрдп рдХреА рд╡реНрдпрд╛рдЦреНрдпрд╛ рдХрд░рддреА рд╣реИ рдХрд┐ рдЗрд╕реЗ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рдХреНрдпреЛрдВ рдирд╣реАрдВ рдмрдирд╛рдпрд╛ рдЧрдпрд╛ рд╣реИ, рд▓реЗрдХрд┐рди рдХреНрдпрд╛ рдХреЛрдИ рдмреЗрд╣рддрд░ рд╕реНрдкрд╖реНрдЯреАрдХрд░рдг рд╣реИ рдХрд┐ рдПрдХ рдПрдбрди рдХреНрдпреЛрдВ рдореМрдЬреВрдж рдирд╣реАрдВ рд╣реИ?
рдХреНрдпрд╛ рдпрд╣ рдХреБрдЫ рдРрд╕рд╛ рд╣реИ рдЬрд┐рд╕реЗ рдЕрднреА рднреА рдЦреЛрдЬрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИ?

рдорд╛рд░реНрдХрд░ рдХреЗ рд▓рд┐рдП +1: refx, refy, рдЙрдиреНрдореБрдЦ

рдкрд╛рда рдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЗ рд▓рд┐рдП +1: рдШреБрдорд╛рдПрдБ, рдкреНрд░рдореБрдЦ-рдЖрдзрд╛рд░ рд░реЗрдЦрд╛

http://www.w3.org/TR/SVG/text.html#TextElementRotateAttribute

+1 рдПрдбрдСрди

+1 рдПрдбрдСрди

рджрд░рдЕрд╕рд▓ рд░рд┐рдПрдХреНрдЯ рдХреЛрд░ 'рд░рд┐рдПрдХреНрд╢рди' рдФрд░ рдбреЛрдо 'рд░рд┐рдПрдХреНрд╢рди-рдбреЛрдо' рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рд╣реЛрдиреЗ рдХреА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдореЗрдВ рд╣реИ, рдФрд░ рдореИрдВ рдЕрдиреБрдорд╛рди рд▓рдЧрд╛ рд░рд╣рд╛ рд╣реВрдВ рдХрд┐ 'рд░рд┐рдПрдХреНрд╢рди-рдПрд╕рд╡реАрдЬреА' рдЖрдЦрд┐рд░ рдореЗрдВ рдХрд╣рд╛рдВ рдЖрдПрдЧрд╛

рдлрд┐рд▓реНрдЯрд░ рдХреЗ рд▓рд┐рдП +1ред

vector-effect рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреГрдкрдпрд╛

рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдПрд╕рд╡реАрдЬреА рдЯреИрдЧ/рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХрд╛ рдЕрдиреБрд░реЛрдз рдХрд░рдиреЗ рд╡рд╛рд▓реЗ рд▓реЛрдЧреЛрдВ рдХреЛ рдЙрдирдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реЛрдиреЗ рдкрд░ рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреЗ рд▓рд┐рдП рдПрдХ рдмрд╣реБрдд рд╣реА рдЦрд░рд╛рдм рдореЙрдбрд▓ рд╣реИред рдпрд╣ рдореВрд░реНрдЦрддрд╛рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдореБрдЭреЗ рдкреГрд╖реНрда рдкрд░ рдПрдХ рдХрд╛рд░реНрдпрд╢реАрд▓ рдПрд╕рд╡реАрдЬреА рдкреНрд░рд╕реНрддреБрдд рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдХреЗрд╡рд▓ dangerouslySetInnerHTML рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдХрд╣рд╛ рдЬрд╛ рд░рд╣рд╛ рд╣реИ, рдпрд╣рд╛рдБ рдХреБрдЫ рдЪреАрдЬрд╝реЗрдВ рдЧрд╛рдпрдм рд╣реИрдВ:

_рдЯреИрдЧ:_

  • feMorphology
  • feOffset
  • feColorMatrix
  • feMerge
  • feMergeNode

_рдЧреБрдг:_

  • filterUnits
  • stdDeviation
  • values
  • in
  • operator

рдФрд░ рд╢рд╛рдпрдж рджреЛрдиреЛрдВ рд╢реНрд░реЗрдгрд┐рдпреЛрдВ рдореЗрдВ рдмрд╣реБрдд рдЕрдзрд┐рдХред рд╡реЗ рд╡рд┐рд╢рд┐рд╖реНрдЯ рдПрд╕рд╡реАрдЬреА рдХреЛрдб рдореЗрдВ рд╕реЗ рдХреБрдЫ рд╣реИрдВ рдЬрд┐рдирдХреЗ рд╕рд╛рде рдореИрдВ рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реВрдВред

vector-effect рд▓рд┐рдП +1

stdDeviation рд▓рд┐рдП +1

рдПрдХ рдЕрд▓рдЧ рдФрд░ рдкреВрд░реНрдг React.SVG рдХреЗ рд▓рд┐рдП +1ред рдореИрдВ рдЕрдм рддрдХ рд░рд┐рдПрдХреНрдЯ рдореЗрдВ рдПрд╕рд╡реАрдЬреА рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдкрд╕рдВрдж рдХрд░ рд░рд╣рд╛ рд╣реВрдВ, рд▓реЗрдХрд┐рди рд╕рдорд░реНрдерди рдХреА рдЕрдкреВрд░реНрдгрддрд╛ рдЗрд╕реЗ рдХрд┐рд╕реА рднреА рдЕрд░реНрдз-рдЬрдЯрд┐рд▓ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХреЗ рд▓рд┐рдП рдирд╣реАрдВ рдЬрд╛рдиреЗ рджреЗрддреА рд╣реИред

@spicyj рдХреЗ рдкрд╛рд╕ рдПрдХ рдЕрд▓рдЧ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдХреЛ рд╕рдорд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдпреЛрдЬрдирд╛ рд╣реИ рдЬрд┐рд╕реЗ рд╣рдореЗрдВ рдЕрдкрдбреЗрдЯ рдХрд░рддреЗ рд░рд╣рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпрд╣ рдЬрд▓реНрдж рд╣реА рдкреВрд░рд╛ рд╣реЛ рдЬрд╛рдПрдЧрд╛ред рдЗрд╕ рдмреАрдЪ, рдХреГрдкрдпрд╛ рдХрд╕ рдХрд░ рдкрдХрдбрд╝реЗрдВред

рдПрдирд┐рдореЗрдЯ рдЯреНрд░рд╛рдВрд╕рдлреЙрд░реНрдо рдХреЗ рд▓рд┐рдП +1

рд╣рд╛рд╡реА-рдЖрдзрд╛рд░ рд░реЗрдЦрд╛ рдХреЗ рд▓рд┐рдП +1 (#3199.)

рдЬреИрд╕реЗ @zpao рдиреЗ рдХрд╣рд╛, рд╣рдо рдЗрд╕реЗ рдЬрд▓реНрдж рд╣реА рдареАрдХ рдХрд░рдиреЗ рдЬрд╛ рд░рд╣реЗ рд╣реИрдВ рддрд╛рдХрд┐ рдХрд┐рд╕реА рднреА рд╡рд┐рд╢реЗрд╖рддрд╛ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХреЗред

рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рддрдм рддрдХ рдХреЗ рд▓рд┐рдП рд▓реЙрдХ рдХрд░ рджреЗрдВред

рдпрд╣ https://github.com/facebook/react/pull/5714 рдореЗрдВ рддрдп рдХрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛

5714 рдХреЛ # 6243 рдореЗрдВ рд╡рд╛рдкрд╕ рдХрд░ рджрд┐рдпрд╛ рдЧрдпрд╛ рдерд╛, рдФрд░ рдЗрд╕ рдкреНрд░рдХрд╛рд░ рд╣рдореЗрдВ рдЕрднреА рднреА рдПрдХ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╢реНрд╡реЗрддрд╕реВрдЪреА рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рд╣рд╛рд▓рд╛рдБрдХрд┐, рдЕрдЪреНрдЫреА рдЦрдмрд░ рдпрд╣ рд╣реИ рдХрд┐ #6243 рдореЗрдВ MDN рдХреЗ рд▓рд┐рдП рд╕реНрдХреНрд░реИрдк рдХреА рдЧрдИ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рд╢рд╛рдорд┐рд▓ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рд╣рдо рдЙрдореНрдореАрдж рдХрд░рддреЗ рд╣реИрдВ рдХрд┐ рдпрд╣ 95% рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЛрдВ рдХреЛ рдХрд╡рд░ рдХрд░реЗрдЧреА ред рдореИрдВрдиреЗ рдЗрд╕ рдкреВрд░реЗ рдореБрджреНрджреЗ рдФрд░ рдЬреБрдбрд╝реЗ рдореБрджреНрджреЛрдВ рдФрд░ рдкреАрдЖрд░ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдврд╝рд╛ рдФрд░ рдореИрдиреНрдпреБрдЕрд▓ рд░реВрдк рд╕реЗ рджреЛ рд▓рд╛рдкрддрд╛ рдЧреБрдг ( focusable рдФрд░ vector-effect ) #6267 рдореЗрдВ рдЬреЛрдбрд╝реЗред рдореБрдЭреЗ рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдпреЗ рдмрджрд▓рд╛рд╡ v15 рдореЗрдВ рдЖрдПрдВрдЧреЗред

рджрд┐рд▓рдЪрд╕реНрдк рдмрд╛рдд рдпрд╣ рд╣реИ рдХрд┐ рдореБрдЭреЗ рдпрдХреАрди рдирд╣реАрдВ рд╣реИ рдХрд┐ _tag_ рд╢реНрд╡реЗрддрд╕реВрдЪреА рдЕрдм рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ рдпрд╛ рдирд╣реАрдВред рдЕрдм рддрдХ рдореИрдВ <marker> , <textPath> , <feGaussianBlur> рдФрд░ рдЗрд╕ рдореБрджреНрджреЗ рдореЗрдВ рдЕрдиреБрд░реЛрдзрд┐рдд рдЕрдиреНрдп рдЯреИрдЧ рдФрд░ рдорд╛рд╕реНрдЯрд░ рдкрд░ рдкрд░реЗрд╢рд╛рдиреА рдХреЗ рдмрд┐рдирд╛ рдЬреБрдбрд╝реЗ рдкреАрдЖрд░ рдореЗрдВ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реВрдВред рдореИрдВ рджреЗрдЦрддрд╛ рд╣реВрдВ рдХрд┐ fbjs рдЕрднреА рднреА рдПрдХ рдПрд╕рд╡реАрдЬреА рдЯреИрдЧ рд╢реНрд╡реЗрддрд╕реВрдЪреА рдХреЛ рдмрдирд╛рдП рд░рдЦрддрд╛ рд╣реИ рдФрд░ рдореБрдЭреЗ рдпрд╣ рдХрд╣рдиреЗ рдХреЗ рд▓рд┐рдП рдкрд░реНрдпрд╛рдкреНрдд рд░реВрдк рд╕реЗ рдХреЛрдбрдмреЗрд╕ рдирд╣реАрдВ рдкрддрд╛ рд╣реИ рдХрд┐ рдЗрд╕рд╕реЗ рдЧрд╛рдпрдм рдЯреИрдЧ рдЖрдЬ рдореЗрд░реЗ рд▓рд┐рдП рдХреНрдпреЛрдВ рдХрд╛рдо рдХрд░рддреЗ рд╣реИрдВ, рдЗрд╕рд▓рд┐рдП рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ @zpao рдпрд╛ @spicyj рдЗрд╕реЗ рд╕реНрдкрд╖реНрдЯ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдФрд░ рдХреНрдпрд╛ #6243 рдХреЛ рдкреВрд░рдХ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рд╣рдореЗрдВ рд╡рд╣рд╛рдВ рд▓рд╛рдкрддрд╛ рдЯреИрдЧ рднреА рдЬреЛрдбрд╝рдиреЗ рд╣реЛрдВрдЧреЗред

рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЕрдирд▓реЙрдХ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдХреНрдпреЛрдВрдХрд┐ рд╡рд┐рд╢реЗрд╖рддрд╛ рд╢реНрд╡реЗрддрд╕реВрдЪреА рдЕрднреА рднреА рдкреНрд░рд╛рд╕рдВрдЧрд┐рдХ рд╣реИ, рд▓реЗрдХрд┐рди рдЙрдореНрдореАрдж рд╣реИ рдХрд┐ рдЕрдм рд╣рдо рдмрд╣реБрдд рдХрдо рдЕрдиреБрд░реЛрдз рджреЗрдЦреЗрдВрдЧреЗ рдХрд┐ рдЕрдзрд┐рдХрд╛рдВрд╢ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЬреЛ рджреЛрдиреЛрдВ рдХрд▓реНрдкрдирд╛ рдореЗрдВ рд╣реИрдВ рдФрд░ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рджреНрд╡рд╛рд░рд╛ рдХрд╛рд░реНрдпрд╛рдиреНрд╡рд┐рдд рдХреА рдЬрд╛рддреА рд╣реИрдВ, рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред рдЕрдЧрд░ рдХреБрдЫ рдЕрднреА рднреА рдЕрдВрддрд┐рдо v15 рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рдирд╣реАрдВ рд╣реИ, рддреЛ рдХреГрдкрдпрд╛ рд╣рдореЗрдВ рдпрд╣рд╛рдВ рдмрддрд╛рдПрдВред

рдпрд╣ рдиреЛрдЯ v15 RC1 рдкрд░ рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ рдЬреЛ рд╕рднреА SVG рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рд╕реЗ рд╣реЛрдХрд░ рдЧреБрдЬрд░рддрд╛ рд╣реИред

рдореИрдВрдиреЗ рджреЗрдЦрд╛ рдХрд┐ xlink:href рд╡рд┐рд╢реЗрд╖рддрд╛ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдХрд╛рдлреА рднреНрд░рдо рд╣реИред рдпрд╣ _is_ рд╡рд░реНрддрдорд╛рди рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реИ рд▓реЗрдХрд┐рди рдЖрдкрдХреЛ рдЗрд╕реЗ рдЕрд▓рдЧ рддрд░реАрдХреЗ рд╕реЗ рд▓рд┐рдЦрдирд╛ рд╣реЛрдЧрд╛:

<use xlinkHref="#shape" x="50" y="50" />

рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рд╕рд╣реА рдврдВрдЧ рд╕реЗ рдЗрд╕реЗ xlink:href рдореЗрдВ рдмрджрд▓ рджреЗрдЧреА, рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ 0.14.x рдореЗрдВ рднреАред рдЙрджрд╛рд╣рд░рдг рдХреЗ рд▓рд┐рдП рдпрд╣ рдкрд╣реЗрд▓реА рджреЗрдЦреЗрдВред

рдореЗрд░реЗ рдЙрдкрдпреЛрдЧ рдХреЗ рдорд╛рдорд▓реЗ рдХреЗ рд▓рд┐рдП рдореБрдЭреЗ рдХреБрдЫ рдлрд╝рд┐рд▓реНрдЯрд░ рддрддреНрд╡реЛрдВ рдЬреИрд╕реЗ feFuncR , рд╡рд┐рд╢реЗрд╖ рд░реВрдк рд╕реЗ рдЙрдирдХреА рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ ( slope , intercept , рдЖрджрд┐) рдХреЛ рдкрд╣рдЪрд╛рдирдиреЗ рдХреЗ рд▓рд┐рдП рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдереАред рдпрд╣ 15.0-рдЖрд░рд╕реА2 рдореЗрдВ рдареАрдХ рдкреНрд░рддреАрдд рд╣реЛрддрд╛ рд╣реИ, рд▓реЗрдХрд┐рди 0.14.рдПрдХреНрд╕ рдХреЗ рд▓рд┐рдП рдореИрдВрдиреЗ рдкрд╣рд▓реЗ react / react-dom рдЖрдпрд╛рдд рдХрд░рдиреЗ рд╕реЗ рдкрд╣рд▓реЗ react/lib/SVGDOMPropertyConfig рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрдпрд╛рдд рдХрд┐рдП рдЧрдП рд╢рдмреНрджрдХреЛрд╢ рдореЗрдВ рдЗрди рд╡рд┐рд╢реЗрд╖рддрд╛рдУрдВ рдХреЛ рдЬреЛрдбрд╝рдХрд░ рдЗрд╕рдХреЗ рдЖрд╕рдкрд╛рд╕ рдХрд╛рдо рдХрд┐рдпрд╛ред рдЕрдкрдиреЗ рдЖрдкред рдЬреИрд╕реЗ:

// Needed to set correct xmlns on <svg> and to preserve attributes on feFunc*.
// Required for 0.14.x. May become unnecessary with 15.x

var SVGDOMPropertyConfig = require("react/lib/SVGDOMPropertyConfig");

var DOMProperty = require("react/lib/DOMProperty");
var MUST_USE_ATTRIBUTE = DOMProperty.injection.MUST_USE_ATTRIBUTE;

SVGDOMPropertyConfig.Properties.in = MUST_USE_ATTRIBUTE;
SVGDOMPropertyConfig.Properties.intercept = MUST_USE_ATTRIBUTE;
SVGDOMPropertyConfig.Properties.slope = MUST_USE_ATTRIBUTE;
SVGDOMPropertyConfig.Properties.xmlns = MUST_USE_ATTRIBUTE;

var React = require("react");
var render = require("react-dom").render;

рдпрд╣ рд╕реНрдкрд╖реНрдЯ рд░реВрдк рд╕реЗ рдПрдХ рд╣реИрдХ рд╣реИ рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдпрд╣ dangerouslySetInnerHTML рдмреЗрд╣рддрд░ рд▓рдЧрддрд╛ рд╣реИ

рд╣рд╛рд▓рд╛рдВрдХрд┐ рдпрд╣ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ, рдпрд╣ рдЖрдзрд┐рдХрд╛рд░рд┐рдХ рддреМрд░ рдкрд░ рдЦреБрд▓рд╛ рдПрдкреАрдЖрдИ рдирд╣реАрдВ рд╣реИ рдФрд░ рдХрд┐рд╕реА рднреА рдорд╛рдореВрд▓реА рдпрд╛ рдкреИрдЪ рд░рд┐рд▓реАрдЬ рдореЗрдВ рдЯреВрдЯ рд╕рдХрддрд╛ рд╣реИред рдЖрдк рдЗрд╕рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рд▓реЗрдХрд┐рди рдЕрдкрдиреЗ рдЬреЛрдЦрд┐рдо рдкрд░ред рдЕрдЧрд░ рдЕрднреА рднреА рдХреБрдЫ рдЫреВрдЯ рд░рд╣рд╛ рд╣реИ рддреЛ рдХреГрдкрдпрд╛ рд╣рдорд╛рд░реЗ рд╕рд╛рде рдХрд╛рдо рдХрд░реЗрдВ рддрд╛рдХрд┐ рд╣рдо рдЙрд╕реЗ рдЬреЛрдбрд╝ рджреЗрдВред рдореБрдЭреЗ рдпрд╣ рдЬрд╛рдирдХрд░ рдЦреБрд╢реА рд╣реБрдИ рдХрд┐ рдЖрдкрдХреЛ 15 RC2 рдореЗрдВ рдХреЛрдИ рд╕рдорд╕реНрдпрд╛ рдирд╣реАрдВ рд╣реИред

рд╣рд╛рдБ, рдмрд┐рд▓реНрдХреБрд▓ред рдореИрдВ рдХреЗрд╡рд▓ рдЗрд╕рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рддрдХ рдХрд░ рд░рд╣рд╛ рд╣реВрдВ рдЬрдм рддрдХ рдХрд┐ 15 рдЖрд░рд╕реА рд╕реНрдерд┐рддрд┐ рд╕реЗ рдмрд╛рд╣рд░ рдирд╣реАрдВ рдЖ рдЬрд╛рддреЗред

v15.0 рдореЗрдВ (рд▓рдЧрднрдЧ) рдкреВрд░реНрдг SVG рд╕рдорд░реНрдерди рдХреЗ рд▓рд┐рдП рдмрд╣реБрдд рдЦреБрд╢ рд╣реИрдВ, рд▓реЗрдХрд┐рди рдореБрдЭреЗ рдПрд╣рд╕рд╛рд╕ рд╣реЛ рд░рд╣рд╛ рд╣реИ рдХрд┐ рдХреБрдЫ рдирд╛рдорд╛рдВрдХрд┐рдд рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЬреИрд╕реЗ xmlns рдФрд░ xmlnsXlink рд░реЗрдВрдбрд░ рдХрд░рддреЗ рд╕рдордп рд▓рд╛рдЧреВ рдирд╣реАрдВ рд╣реЛ рд╕рдХреАрдВ, рдФрд░ рдпрд╣ рджрд┐рдЦрд╛рддреЗ рд╕рдордп рдареАрдХ рд╣реИ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ svg ред

рдпрджрд┐ рдЖрдк рдПрдХ .svg рдЫрд╡рд┐ рдмрдирд╛рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ рддреЛ рд╡реЗ рд╡рд┐рд╢реЗрд╖рддрд╛рдПрдБ рдЖрд╡рд╢реНрдпрдХ рд╣реИрдВред

ReactDOMServer.renderToStaticMarkup(<MyCustomSVG />)

рддреЛ рдЙрдкрд░реЛрдХреНрдд рдХреЛрдб рдХрд░рдирд╛, рдХрд╛рдо рдирд╣реАрдВ рдХрд░реЗрдЧрд╛ред

рд╢рд╛рдпрдж рдЗрд╕ рддрдереНрдп рд╕реЗ рд╕рдВрдмрдВрдзрд┐рдд рд╣реИ рдХрд┐:

... document.createElement рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдзрдиреНрдпрд╡рд╛рдж, рд╣рдореЗрдВ рдЕрдм рдПрд╕рд╡реАрдЬреА рдЯреИрдЧ рдХреА рд╕реВрдЪреА рдмрдирд╛рдП рд░рдЦрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИ, рдЗрд╕рд▓рд┐рдП рдХреЛрдИ рднреА рдПрд╕рд╡реАрдЬреА рдЯреИрдЧ рдЬреЛ рдкрд╣рд▓реЗ рдЕрд╕рдорд░реНрдерд┐рдд рдереЗ, рдЙрдиреНрд╣реЗрдВ рд░рд┐рдПрдХреНрдЯ 15 рдореЗрдВ рдареАрдХ рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред

рдФрд░ document.createElementNS ред

рдФрд░ рджрд╕реНрддрд╛рд╡реЗрдЬрд╝ рдирд╣реАрдВред createElementNSред

рдмреНрд▓реЙрдЧ рдкреЛрд╕реНрдЯ рдереЛрдбрд╝рд╛ рдмрд╣реБрдд рд╕рд░рд▓ рд╣реИ, рд▓реЗрдХрд┐рди createElementNS рдХрд╛ рдЙрдкрдпреЛрдЧ рддрдм рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ рдЬрдм рд╣рдо <svg> рдЯреИрдЧ рдХреЗ рдЕрдВрддрд░реНрдЧрдд рд╣реЛрддреЗ рд╣реИрдВред рдпрджрд┐ рдРрд╕рд╛ рдирд╣реАрдВ рд╣реЛрддрд╛ рд╣реИ, рддреЛ рдХреНрдпрд╛ рдЖрдк рд╕рдорд╕реНрдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реБрдП рдПрдХ рдЕрд▓рдЧ рд╕рдорд╕реНрдпрд╛ рджрд░реНрдЬ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ, рдПрдХ JSFiddle рдХреЗ рд╕рд╛рде рдЬреЛ рдЗрд╕реЗ рдкреБрди: рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ? рдзрдиреНрдпрд╡рд╛рдж!

рдзрдиреНрдпрд╡рд╛рдж @gaearonред рдореБрдЭреЗ рд▓рдЧрддрд╛ рд╣реИ рдХрд┐ рдЬрдм рдкреНрд░рд╕реНрддреБрдд рдХрд░рдирд╛ рдпрд╣ рд╣реЛрддрд╛ рд╣реИ svg рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдмреНрд░рд╛рдЙрдЬрд╝рд░ рдореЗрдВ ReactDOM ред рд╕рдВрднрд╡рдд: рдпрд╣ рдореБрджреНрджрд╛ ReactDOMServer ред

рдпрд╣рд╛рдВ рдПрдХ рдкреЗрди рд╣реИ рдЬреЛ рдкреНрд░рд╕реНрддреБрдд SVG рдФрд░ renderToStaticMarkup() рдорд╛рдзреНрдпрдо рд╕реЗ рдЙрддреНрдкрдиреНрди рдХреЛрдб рджрд┐рдЦрд╛рддрд╛ рд╣реИ рдЬрд╣рд╛рдВ рдХрдо рд╕реЗ рдХрдо xmlNS рдФрд░ xmlnsXlink attrs рдЧрд╛рдпрдм рд╣реИред

рдЕрдЧрд░ рдРрд╕рд╛ рд╣реИ рддреЛ рдореИрдВ рдЗрд╕ рдореБрджреНрджреЗ рдХреЛ рдЕрд▓рдЧ рд╕реЗ рджрд╛рдпрд░ рдХрд░ рд╕рдХрддрд╛ рд╣реВрдВред

рд╣рд╛рдБ, xmlns рдФрд░ xmlns:Xlink рдЧрд╛рдпрдм рд╣реИрдВред https://github.com/facebook/react/pull/6471 рдореЗрдВ рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП рдХреБрдЫ рдХрд╛рд░реНрдп рдкреНрд░рдЧрддрд┐ рдкрд░ рд╣реИрдВред

рдореБрдЭреЗ рдЕрднреА рднреА рд╕рдорд░реНрдерд┐рдд рдЯреИрдЧ рдХреА рд╕реВрдЪреА рдореЗрдВ <animate> рдФрд░ <animateTransform> рд░рд╣реЗ рд╣реИрдВред рдХреНрдпрд╛ рдХреЛрдИ рдХрд╛рд░рдг рд╣реИ рдХрд┐ рдЖрдкрдиреЗ рдЗрд╕рдХрд╛ рд╕рдорд░реНрдерди рдирд╣реАрдВ рдХрд░рдирд╛ рдЪреБрдирд╛?

@shilpan

рд╕рднреА рдЯреИрдЧ рдЕрдм рд╕рдорд░реНрдерд┐рдд рд╣реИрдВред рд╕реВрдЪреА рдХреЗрд╡рд▓ рдпрд╣ рдмрддрд╛рддреА рд╣реИ рдХрд┐ рдХреМрди рд╕реЗ рдЯреИрдЧ React.DOM.* рдлрд╝реИрдХреНрдЯрд░реА рдлрд╝рдВрдХреНрд╢рдВрд╕ рдХреЗ рд░реВрдк рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ:

рдирд┐рдореНрдирд▓рд┐рдЦрд┐рдд SVG рддрддреНрд╡ React.DOM рдореЗрдВ рд╕рдорд░реНрдерд┐рдд рд╣реИрдВ

(рдЬреЛрд░ рдореЗрд░рд╛)

рдпрджрд┐ рдЖрдк JSX рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдкрдХреЛ рдЗрд╕рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдмрд┐рд▓реНрдХреБрд▓ рднреА рдЪрд┐рдВрддрд╛ рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рдирд╣реАрдВ рд╣реИтАФ <animate> рдФрд░ <animateTransform> рд▓рд┐рдЦрдирд╛ рдХреЗрд╡рд▓ рдЗрд╕рд▓рд┐рдП рдХрд╛рдо рдХрд░реЗрдЧрд╛ рдХреНрдпреЛрдВрдХрд┐ JSX React.DOM.* рдХрд╛рд░рдЦрд╛рдиреЛрдВ рдкрд░ рдирд┐рд░реНрднрд░ рдирд╣реАрдВ рд╣реИред

рдпрд╣рд╛рдВ рддрдХ тАЛтАЛрдХрд┐ рдЕрдЧрд░ рдЖрдк JSX рдХрд╛ рдЙрдкрдпреЛрдЧ рдирд╣реАрдВ рдХрд░рддреЗ рд╣реИрдВ, рддреЛ рдЖрдк React.createElement('animate', ...) рдЙрдкрдпреЛрдЧ рдХрд░ рд╕рдХрддреЗ рд╣реИрдВ рдЬреЛ рдареАрдХ рдХрд╛рдо рдХрд░реЗрдЧрд╛, рдпрд╛ рдЕрдкрдирд╛ рдЦреБрдж рдХрд╛ рдлрд╝реИрдХреНрдЯрд░реА рдлрд╝рдВрдХреНрд╢рди рдмрдирд╛рдПрдБ: var animate = React.createFactory('animate") ред

+1 xmlns рд▓рд┐рдП рд╕рдорд░реНрдерди рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП .... рдЗрд╕ рдмреАрдЪ рдЕрдЧрд░ рдХрд┐рд╕реА рдХреЛ рдХрд╛рдордХрд╛рдЬ рдореЗрдВ рджрд┐рд▓рдЪрд╕реНрдкреА рд╣реИ (рдЬрд┐рд╕реЗ рдореБрдЭреЗ рдЖрдИрдИ 9-11 рдХрд╛ рд╕рдорд░реНрдерди рдХрд░рдиреЗ рдореЗрдВ рд╕рдХреНрд╖рдо рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдП) рддреЛ рдореИрдВ рдпрд╣реА рд▓реЗрдХрд░ рдЖрдпрд╛ рд╣реВрдВ:

// explicitly build the SVG to be rendered here so we don't lose the NS
const stringifiedSvg = `<svg xmlns="http://www.w3.org/2000/svg" class="svgClass">
                               <use xlink:href="#linkToSymbolId"></use>
                        <svg/>`

return <div dangerouslySetInnerHTML={{__html: stringifiedSvg}}/>
рдХреНрдпрд╛ рдпрд╣ рдкреГрд╖реНрда рдЙрдкрдпреЛрдЧреА рдерд╛?
0 / 5 - 0 рд░реЗрдЯрд┐рдВрдЧреНрд╕

рд╕рдВрдмрдВрдзрд┐рдд рдореБрджреНрджреЛрдВ

huxiaoqi567 picture huxiaoqi567  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

trusktr picture trusktr  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

zpao picture zpao  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

krave1986 picture krave1986  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ

DimitarChristoff picture DimitarChristoff  ┬╖  3рдЯрд┐рдкреНрдкрдгрд┐рдпрд╛рдБ