ã¡ã³ããããã®ã¡ã¢ïŒ React 15以éããã©ãŠã¶ãŒã«ãã£ãŠå®éã«å®è£ ãããSVGä»æ§ã®ãµãã»ãããå®å šã«ãµããŒãããå¿ èŠããããŸãã
äžè¶³ããŠããå±æ§ãèŠã€ããå ŽåããŸãã¯ã¿ã°ãæ£ããæ©èœããªãå Žåã¯ã以äžã«ã³ã¡ã³ããæžã蟌ãã§ãã ããã React.DOM.*
ãã¡ã¯ããªé¢æ°ã¯ãã¹ãŠã®ã¿ã°ãæäŸããªãå ŽåããããŸãããäžè¶³ããŠããã¿ã°ã«ã¯React.createFactory
ãŸãã¯React.createElement()
çŽæ¥äœ¿çšã§ããã¯ãã§ãã ãŸãã¯ã React.createElement()
å€æããããã¹ãŠã®ã¿ã°ãæ¬è³ªçã«ãµããŒãããJSXã䜿çšããããšãã§ããŸãã
ããã«åãçµãã§ãã人ã¯ããŸããïŒ filter
ã¿ã°ãå®è£
ããããšæã£ãŠããŸãã
preserveAspectRatio
ãæ¬ èœããŠããããã§ãïŒ http ïŒ
ãã®ããã®PRãäœæããå¿ èŠããããŸããããããšãæåã«äžè¶³ããŠãããã¹ãŠã®å±æ§/ã¿ã°ãåéããåŸã§åäžã®ããããäœæããããšãåžæããŸããïŒ
[ç·šé] preserveAspectRatioãã³ãããã«è¿œå ãããŸããhttps://github.com/facebook/react/commit/0f0328f0930d7fcf0b92cde40b1d6966cd747054
ããã«ã¡ã¯ã
äžèšã®ããã«ãïŒ1738ã®@cassusã®ãããã§marker *å±æ§ãè¿œå ãããŸããã
é¢é£ãã<marker>
SVGèŠçŽ ãè¿œå ããã®ã¯ã©ãã§ããïŒ
https://developer.mozilla.org/en-US/docs/Web/SVG/Element/marker
ç§ããããå¿ èŠã ãšæ°ã¥ããŸããã ããããã®æŠèŠã§ãïŒ http ïŒ
ãã®ã1人ãå¿ èŠãšãããšãã«ã©ã³ãã ãªèŠçŽ ãšå±æ§ããã¡ãã¡ã«è¿œå ãããã¢ãããŒãã¯æã«è² ããªããªã£ãŠããŸãã ãããã£ãŠããã¹ãŠããµããŒãããããäœããµããŒãããªããïŒãŸãã¯ãé©åãªã»ãããä»ããè¿œå ããŠãããã§ããªãŒãºããïŒããå¿ èŠããããŸãã
ç§ã¯http://www.w3.org/TR/2003/REC-SVG11-20030114/attindex.htmlã_ã»ãšãã©ãã¹ãŠïŒåå空éã®å±æ§ãæ°ããªãïŒã§ã¹ã¯ã¬ã€ãã³ã°ãããããæãã€ããïŒ https ïŒ
ãã ããããã«ãããçž®å°ããããã«ãã«æ倧2kbãè¿œå ããïŒã¯ããŒãžã£ãŒã³ã³ãã€ã©ãŒã§ã¯ããŸãæ©èœããŸããïŒãä»ã¯ãã®ãµã€ãºã®å¢å ãåãå ¥ããããããŸããã å¥ã®SVGãã«ããè¡ãããšã«ã€ããŠè©±ããŸããã ãŸãã¯ãã¢ããªã³ãšããŠåå¥ã«çºéããŸãã
@zpaoãã®éãã§ãã å®å šãªSVGãµããŒãã¯ã¢ããªã³ã«ãªãå¯èœæ§ããããŸãã ãã®ããã«ã¯ãããšãã°React.DOM.circleãReact.SVG.circleã«ãªãããšãéç¥ããããã«ãæžäŸ¡ååŽèŠåãèšå®ããå¿ èŠããããŸãã
React.SVG.circleã®+1
@zpao
å®å
šãªSVGã¢ããªã³ã¯è¯ãã¢ãããŒãã®ããã«èãããŸãã å€ãã®ãããžã§ã¯ãã¯SVGãå¿
èŠãšããªãã®ã§ããããã®ã³ãŒããæ¯èŒæ€èšããã¹ãã§ã¯ãããŸããã ä»ã®ãããžã§ã¯ããå¿
èŠã§ããããµããŒãã®éäžã§è¡ãã®ã¯æå³ããããŸããã
+1
ç»åãµããŒãã®+1
ç»åãµããŒãã+1
<use>
ãµããŒãã®å ŽådangerouslySetHTML
ãæ©èœãããããã«ããŠããŸãããã€ãã³ããããªã³ã°ã¯æ©èœããŸããã
strokeDashoffset
ãŸããã 次ã®ãããªããã°ã¬ã¹ããŒã«äœ¿çšãããïŒ http ïŒ
strokeDashoffset
+1
ããã°ã¬ã¹ããŒã«ã䜿çšãããã
<text>
äœæ¥ããŠãããšãã«ã alignment-baseline
ããããŸãã
ãããã誰ããhttp://www.w3.org/TR/SVG/Overview.htmlããããŒã«ããŠããã¹ãŠã®å±æ§ãšããããã£ãååŸããæå¿ãæã£ãŠããŸããïŒ ïŒãã®ç®çã«ã¯ãã£ãšè¯ãURLããããããããŸãããã確ãã§ã¯ãããŸãã...ïŒ
ãã1ã€ã®å©ãã¯ããœãŒã¹ã³ãŒããšãã¹ãã®ã©ãã§ãããå€æŽããããç¥ã£ãŠãåå¿ããããã®ã³ããããç°¡åã«è¡ããããã«ããããšã§ãã
FWIWãã»ãšãã©ã®å±æ§ã¯åŒãç¶ãã¹ã¿ã€ã«å±æ§ã䜿çšããŠé©çšã§ããŸãã
<path style={{strokeDashoffset: 100}} />
@syranideç§ã¯ãããããŸããïŒæåã§è¡ãã®ã¯çæ°ã«ãªããããã»ãšãã©èªååãããŠããŸãïŒ ïŒ//github.com/zpao/react/compare/fuck-svgã ãªãããããã§ã«ããŒãžãããŠããªãã®ãã«ã€ããŠã®ç§ã®ä»¥åã®ã³ã¡ã³ããåç §ããŠãã ããã
@ThomasDeutschãããŸã§ã®SVGé¢é£ã®ãã«ãªã¯ãšã¹ãã®ã»ãšãã©ãåç §ããŠãã ããã ãšã¯ããã1ã€ãã€è¿œå ãããããèšç»ãç«ãŠãããšæããŸãïŒåã®ã³ã¡ã³ãã玹ä»ããŸãïŒã
textPathã®+ 1-çŸåšåãçµãã§ãããããžã§ã¯ãã«å¿ èŠã§ããçŸåšãåä»ãªãœãªã¥ãŒã·ã§ã³ããããã³ã°ããŠããŸãã ReactSVGãã©ã°ã€ã³ããã¯ã®å®è£ ã«è²¢ç®ã§ããã°å¹žãã§ãã
ïŒ+1ïŒå®å šãªSVGã¢ããªã³ã®å Žåã ããããã€åºè·ããããã«ã€ããŠã®èŠç©ããã¯ãããŸããïŒ
ForeignObjectã®å Žåã¯+1
ForeignObjectã®å Žåã¯+1
svgã¹ãã©ã€ãã䜿çšããããã®å±æ§xlink:href
ã
<use>
ãµããŒãã®+1
å±æ§ïŒmaskUnitsïŒmaskContentUnitsïŒïŒ2056ïŒ
ãã¹ã¯å±æ§ïŒ2535
patternTransform
ããã¹ãå±æ§text-anchor
textPathã®+1
svgã¢ã€ã³ã³åŠçã®<use>
å Žåã¯+1ã
SVGã¢ããªã³ã®å Žåã¯+1ã ç§ã¯çŸåšããããžã§ã¯ãã«å¿
èŠãªã®ã¯<clipPath>
ã ãã§ãããå°æ¥å¿
èŠã«ãªããã®ã¯èª°ã«ãããããŸããã å
æ¬çãªã¢ããªã³ã¯éåžžã«åœ¹ç«ã¡ãŸãã
ã¢ããªã³ã®å Žåã¯+1ã
Reactã§SVGãåºç¯å²ã«äœ¿çšããããšãèšç»ããŠããã®ã§ãç§ãã¡ã®ãããªãããžã§ã¯ãçšã®å®å šãªSVGã¢ããªã³ã¯çŽ æŽãããã¢ã€ãã¢ã®ããã§ãã
textPathã®å Žåã¯+1ãäžè¬çã«ã¯ããå®å šãªsvgãµããŒãã
SVGãå®å
šã«ãµããŒãããããŸã§ãé©åãªåé¿çã¯ãå¿
èŠãªèŠçŽ ãæ瀺çã«ã¬ã³ããªã³ã°ããã³å®£èšããããã«ééããå¿
èŠãããsvgå±æ§ãReactã«æ瀺ããããšã§ãã ããšãã°ã <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ãããè¡ããšãã¯æ³šæããŠãã ããâå±æ§ãå€æŽãããå Žåã§ããReactã¯setAttributeïŒsetAttributeNSã§ã¯ãªãïŒãåŒã³åºããæŽæ°ã¯ããããæ£ããæ©èœããŸããã
@spicyj Reactã«åå空éã®ãµããŒãããããŸããïŒã€ãŸããã³ãŒãããŒã¹ã«setAttributeNS
ã®åŒã³åºãããããŸããïŒã åå空éã䜿çšããŠå±æ§ãèšå®ããé©åãªæ¹æ³ã«é¢ããææ¡ã¯ãããŸããïŒ
åå空éå±æ§ãã©ã®ããã«æ©èœãããã¯ããããŸãããçŸåšããµããŒããããŠããŸãããç³ãèš³ãããŸããã
vector-effect
ãããã§ãããã ãã®éã«äœ¿çšã§ããåºå®å¹
ã®ã¹ãããŒã¯ããããªãã§ç¶æããå¥ã®æ¹æ³ã¯ãããŸããïŒ
ForeignObjectã®å Žåã¯+1
ããã¹ãããŒã¹ã©ã€ã³å±æ§ã®PRãåç §ããã ãã§ãïŒïŒ2697
ãããç§ã¯use
ã¿ã°ãå¿
èŠã§ãïŒãã£ããããŸããïŒ
ãè¿ãã¬ã³ããªã³ã°é¢æ°ãæã€ã«ã¹ã¿ã ã³ã³ããŒãã³ãã䜿çšããããšã«èŸä»»ããŸãã
<svg dangerouslySetInnerHTML={{ __html: '<use xlink:href="#' + this.props.icon + '"/>' }} />
éãã§ãããåäœããŸãã
ïŒ+1ïŒããã«ã€ããŠ
ã¢ããªã³ã§ã®å®å šãªsvgãµããŒãã®ããã«+1ãªã³
ïŒ+1ïŒ
@zpao @spicyj ReactDOM
ãšSVGDOMPropertyConfig
ã¢ã³ããŒããããé©çšããã«ããããã®åã
ã®SVGèŠçŽ ãReactã«è¿œå ãããµããŒããããŠããæ¹æ³ã¯ãããŸããïŒ
ç³ãèš³ãããŸããã
ç»åãšforeignObjectã®å Žåã¯+1
ForeignObjectã®å Žåã¯+1
animate
ãæ©èœããããã®å±æ§ã®äžéšãæ©èœããªãå¯èœæ§ããããŸãïŒ https ïŒ
ã¢ããªã³ã§SVGããµããŒãããç¶æ³ã¯ã©ããªã£ãŠããŸããïŒ ä»æ¥ããã«ééãã:-(
cc @xymostech @MichelleTodd
åå空éå±æ§ã®å Žåã¯+1ã
ã¢ããªã³ã§ã®å®å šãªsvgãµããŒãã®ããã«+1ãªã³
SVGå±æ§ãµããŒãã®å Žåã¯+1000 :-)
ãµããŒãããããã®+1
å±æ§ãfill-ruleããè¿œå ããããã®ãªã¯ãšã¹ãããããããfillRuleããšããŠ
SVGã¢ããªã³ãèŠããïŒ+1ïŒ
Reactã³ã¢ããŒã ãããã«é¢ããèå°è£ã®åã/è°è«ã¯ãããŸããïŒ
ç¹ã«ããã«ã€ããŠã§ã¯ãããŸããããïŒ3718ãïŒ3763ã¯äž¡æ¹ãšãSVGã§äœæ¥äžã§ãããïŒ3067ããã®å±æ§ã®å€æŽã«é¢é£ããŠããŸãã
å®å šãªSVGãµããŒãã®å Žåã¯+1ã ãããèµ·ããåã«ãã«ã¹ã¿ã ã¿ã°ãšå±æ§ãäœæããæ¹æ³ãå¿ èŠã«ãªããŸãã 誰ããç§ãå©ããŠãããŸããïŒ
ããŒã«ãŒèŠçŽ ããããŸããïŒhttps://developer.mozilla.org/en/docs/Web/SVG/Element/markerïŒ
@ersagunkurucaãããŸã§ã®éhttps://gist.github.com/akre54/80eaa63762ea499029f0ãè©ŠããŠ
ïŒ+1ïŒããŒã«ãŒçšïŒ
SVGã®ãã¹ãŠã®ãã®ã«+1ã
ïŒ+1
animateTransformããããã£ã®ãµããŒãã¯ã©ãã§ãã
<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
+ãã¹ãŠã®SVGããµããŒããããŠããŸã
ãã£ã«ã¿ã®å Žåã¯+1
䜿çšãµããŒãã®ããã®+1ïŒ
åå空éå±æ§ã®å Žåã¯+1
use
ããã³filter
å±æ§ã®ãµããŒãã®+1
<image>
ãµããŒãã®å Žå<svg>
ã¿ã°ã®xmlns:xlink="http://www.w3.org/1999/xlink"
å±æ§ã«ãã³ã°ã¢ããããŠããŸãã
filter
+1
@zpaoã®ã³ã¡ã³ããèæ ®ãããšããã®åé¡ãããã¯ããå¿ èŠããããŸããïŒ ãŸãã¯ãå°ãªããšãããã®æ å ±ã§OPãæŽæ°ã§ããŸããïŒ ç§ã¯æŽæ°ã®ããã«ã¹ã¬ããã賌èªããŠããŸããã @ zpaoã®ã³ã¡ã³ãã¯ïŒäœæ¥ããã§ã«è¡ãããŠãããšããäºå®ãšãšãã«ïŒåããããŠãããã¹ã¬ããå šäœãèªãã§ããªã人ã«ãšã£ãŠã¯ã¡ãã£ãšæ··ä¹±ããŸãã
@zpaoã®ã³ã¡ã³ãã¯ããããçŸåšreactã«çµã¿èŸŒãŸããŠããªãçç±ã«ã€ããŠã®æ±ºå®ã説æããŠããŸãããã¢ããªã³ãååšããªãçç±ã«ã€ããŠã®ããè¯ã説æã¯ãããŸããïŒ
ããã¯ãŸã æ¢æ±ã§ãããã®ã§ããïŒ
ããŒã«ãŒã®+1ïŒrefxãrefyãorient
ããã¹ãã®å±æ§ã®+1ïŒå転ããããã³ãããŒã¹ã©ã€ã³
http://www.w3.org/TR/SVG/text.html#TextElementRotateAttribute
+1ã¢ããªã³
+1ã¢ããªã³
å®éãReactã¯ã³ã¢ã®ãreactããšdomã®ãreact-domãã«åå²ãããéçšã«ããããreact-svgããæçµçã«ç»å Žããå Žæã ãšæããŸãã
ãã£ã«ã¿ã®å Žåã¯+1ã
vector-effect
å±æ§ããé¡ãããŸã
ããŸããŸå¿
èŠã«ãªã£ããšãã«SVGã¿ã°/å±æ§ãèŠæ±ãã人ã¯ãReactã®éåžžã«è²§åŒ±ãªã¢ãã«ã ãšæããŸãã ããŒãžäžã§æ©èœããSVGãã¬ã³ããªã³ã°ããããã ãã«dangerouslySetInnerHTML
ã䜿çšããªããã°ãªããªãã®ã¯ã°ãããŠããŸãã ããã¯èšã£ãŠããäžè¶³ããŠãããã®ã®ããã€ãã¯æ¬¡ã®ãšããã§ãã
_ã¿ã°ïŒ_
feMorphology
feOffset
feColorMatrix
feMerge
feMergeNode
_å±æ§ïŒ_
filterUnits
stdDeviation
values
in
operator
ãããŠããããäž¡æ¹ã®ã«ããŽãªãŒã§ãã£ãšããããã ãããã¯ãç§ã䜿çšããŠããç¹å®ã®SVGã³ãŒãã®ã»ãã®äžéšã§ãã
vector-effect
+1
stdDeviation
+1
åå¥ã®å®å šãªReact.SVGã®å Žåã¯+1ã ç§ã¯ãããŸã§Reactã§SVGã䜿çšããã®ã倧奜ãã§ããããµããŒããäžå®å šãªãããåè€éãªã¢ããªã±ãŒã·ã§ã³ã«ã¯å¯Ÿå¿ã§ããŸããã
@spicyjã«ã¯ãæŽæ°ãç¶ããããã«å¿ èŠãªåå¥ã®æ§æã®å¿ èŠæ§ãæé€ããèšç»ããããŸãã ããŸãããã°ãããã¯ããã«å®äºããã§ãããã ãã®éããã£ãããšæ¡ã£ãŠãã ããã
animateTransformã®+1
æ¯é ããŒã¹ã©ã€ã³ã®å Žåã¯+1ïŒïŒ3199ïŒ
@zpaoãèšã£ãããã«ããããããã«ä¿®æ£ããŠãä»»æã®å±æ§ã䜿çšã§ããããã«ããäºå®ã§ãã
ãããŸã§ãã®åé¡ãããã¯ããŸãã
ããã¯https://github.com/facebook/react/pull/5714ã§ä¿®æ£ãããŸãã
focusable
ãšvector-effect
ïŒãæåã§è¿œå ããŸããã ãããã®å€æŽã¯v15ã«åæ ããããšæããŸããèå³æ·±ãããšã«ã_tag_ãã¯ã€ããªã¹ããããé©åãã©ããã¯ããããŸããã ãããŸã§ã®ãšããã <marker>
ã <textPath>
ã <feGaussianBlur>
ãããã³ãã®å·ã§èŠæ±ããããã®ä»ã®ã¿ã°ãšããªã³ã¯ãããPRã§ããã¹ã¿ãŒã«åé¡ãªã䜿çšã§ããŸããã fbjs
ãŸã SVGã¿ã°ã®ãã¯ã€ããªã¹ããæ©èœããã®ãã @ zpaoãŸãã¯@spicyjããããæ確ã«ã§ãããã©ããã確èªã§ããŸãã ïŒ6243ãè£å®ããããã«ãäžè¶³ããŠããã¿ã°ãããã«è¿œå ããå¿
èŠããããŸãã
å±æ§ãã¯ã€ããªã¹ãããŸã é¢é£ããŠããããããã®åé¡ã®ããã¯ã解é€ããŠããŸãããä»æ§ã«å«ãŸãããã©ãŠã¶ãŒã«ãã£ãŠå®è£ ãããŠããå±æ§ã®ã»ãšãã©ããµããŒããããŠããããããªã¯ãšã¹ããå€§å¹ ã«å°ãªããªãããšãé¡ã£ãŠããŸãã æçµçãªv15ã§ãŸã ãµããŒããããŠããªããã®ãããå Žåã¯ããã¡ããããç¥ãããã ããã
ãã®æ³šèšã¯ããã¹ãŠã®SVGå±æ§ãééãããv15RC1ã«ã¯é©çšãããŸããã
xlink:href
å±æ§ã«ã€ããŠã¯ããªãæ··ä¹±ããŠããããã§ãã çŸåšãµããŒããããŠããŸãããå¥ã®æ¹æ³ã§èšè¿°ããå¿
èŠããããŸãã
<use xlinkHref="#shape" x="50" y="50" />
Reactã¯ã0.14.xã§ãã£ãŠãããããxlink:href
ã«æ£ããå€æããŸãã äŸã«ã€ããŠã¯ããã®ãã£ãã«ãåç
§ããŠãã ããã
ç§ã®ãŠãŒã¹ã±ãŒã¹ã§ã¯ãReactãfeFuncR
ãããªããã€ãã®ãã£ã«ã¿ãŒèŠçŽ ãå
·äœçã«ã¯ãããã®å±æ§ïŒ slope
ã intercept
ãªã©ïŒãèªèããå¿
èŠããããŸããã 15.0-rc2ã§ã¯åé¡ãªãããã§ããã0.14.xã§ã¯ãæåã«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
ã奜ãŸãããšæããŸã
ããã¯æ©èœããŸãããå ¬åŒã«å ¬éãããŠããAPIã§ã¯ãªãããã€ããŒãªãªãŒã¹ãŸãã¯ããããªãªãŒã¹ã§æ©èœããªããªãå¯èœæ§ããããŸãã ããªãã¯ããã䜿ãããšãã§ããŸãããããªãèªèº«ã®è²¬ä»»ã§ã ããã§ã足ããªããã®ãããå Žåã¯ãè¿œå ããŠãã ããã 15RC2ã«åé¡ããªãããšãããããæããŸãã
ããã絶察ã«ã ç§ã¯15ãRCã¹ããŒã¿ã¹ããåºããŸã§ããã䜿çšããŠããã ãã§ãã
v15.0ã§ã®ïŒã»ãŒïŒå®å
šãªSVGãµããŒãã«ã¯ããªãæºè¶³ããŠããŸããã xmlns
ãxmlnsXlink
ãªã©ã®åå空éå±æ§ã¯ãã¬ã³ããªã³ã°æã«é©çšã§ããªãã£ãããšã«æ°ã¥ããŸãããããã¯ã衚瀺æã«åé¡ãããŸããããã©ãŠã¶ã®svg
ã
.svg
ç»åãäœæããå Žåã¯ããããã®å±æ§ãå¿
èŠã§ãã
ReactDOMServer.renderToStaticMarkup(<MyCustomSVG />)
ãããã£ãŠãäžèšã®ã³ãŒããå®è¡ããŠãæ©èœããŸããã
ãããã次ã®äºå®ã«é¢é£ããŠããŸãïŒ
...
document.createElement
ã䜿çšãããããã§ãSVGã¿ã°ã®ãªã¹ããç¶æããå¿ èŠããªããªã£ãããã以åã¯ãµããŒããããŠããªãã£ãSVGã¿ã°ã¯React15ã§åé¡ãªãæ©èœããã¯ãã§ãã
document.createElementNS
ãããŸããã
document.createElementNSã§ã¯ãããŸããã
ããã°ã®æçš¿ã¯å°ãåçŽãããŸããã <svg>
ã¿ã°ã®äžã«ããå Žåã¯createElementNS
ã䜿çšãããŸãã ãããèµ·ãããªãå Žåã¯ãåé¡ãåçŸããJSFiddleã«ãåé¡ã説æããå¥ã®åé¡ãæåºããŠãã ããã ããããšãïŒ
@gaearonããããšãããããŸãã ReactDOM
ä»ããŠãã©ãŠã¶ã§svg
ãã¬ã³ããªã³ã°ãããšãå®éã«çºçãããšæããŸãã ããããããã®åé¡ã¯ReactDOMServer
é¢é£ããŠããŸãã
ããã¯ãã¬ã³ããªã³ã°ãããSVG
ãšrenderToStaticMarkup()
ãä»ããŠçæãããã³ãŒãã瀺ããã³ã§ãå°ãªããšãxmlNS
ãšxmlnsXlink
ã®å±æ§ããããŸããã
ãã®å Žåã¯ããã®åé¡ãåå¥ã«æåºã§ããŸãã
ããã xmlns
ãšxmlns:Xlink
ããããŸããã https://github.com/facebook/react/pull/6471ã«ã¯ããããè¿œå ããããã®é²è¡äžã®äœæ¥ãããã€ããã
ãµããŒããããŠããã¿ã°ã®ãªã¹ãã«<animate>
ãš<animateTransform>
ããŸã 衚瀺ãããŸããã ããªããããããµããŒãããªãããšãéžãã çç±ã¯ãããŸããïŒ
@shilpan
çŸåšããã¹ãŠã®ã¿ã°ããµããŒããããŠããŸãã ãã®ãªã¹ãã«ã¯ã React.DOM.*
ãã¡ã¯ããªé¢æ°ãšããŠãµããŒããããŠããã¿ã°ã®ã¿ã瀺ãããŠããŸãã
次ã®SVGèŠçŽ ãReact.DOMã*ã§ãµããŒãã
ïŒåŒ·èª¿é±å±±ïŒ
JSXã䜿çšããŠããå Žåã¯ãããã«ã€ããŠãŸã£ããå¿é
ããå¿
èŠã¯ãããŸãããJSXã¯React.DOM.*
ãã¡ã¯ããªã«äŸåããŠããªãããã <animate>
ãš<animateTransform>
ãèšè¿°ããŠãåé¡ãããŸããã
JSXã䜿çšããªãå Žåã§ãã React.createElement('animate', ...)
ã䜿çšããŠåé¡ãªãåäœããããç¬èªã®ãã¡ã¯ããªé¢æ°var animate = React.createFactory('animate")
äœæã§ããŸãã
xmlns
ãµããŒããè¿œå ããããã®+1 ....ãããŸã§ã®éãåé¿çïŒIE9-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}}/>
æãåèã«ãªãã³ã¡ã³ã
xlink:href
å±æ§ã«ã€ããŠã¯ããªãæ··ä¹±ããŠããããã§ãã çŸåšãµããŒããããŠããŸãããå¥ã®æ¹æ³ã§èšè¿°ããå¿ èŠããããŸããReactã¯ã0.14.xã§ãã£ãŠããããã
xlink:href
ã«æ£ããå€æããŸãã äŸã«ã€ããŠã¯ããã®ãã£ãã«ãåç §ããŠãã ããã