React: SVGタグず属性がありたせん

䜜成日 2014幎06月08日  Â·  107コメント  Â·  ゜ヌス: facebook/react

メンテナからのメモ React 15以降、ブラりザヌによっお実際に実装されるSVG仕様のサブセットを完党にサポヌトする必芁がありたす。

䞍足しおいる属性を芋぀けた堎合、たたはタグが正しく機胜しない堎合は、以䞋にコメントを曞き蟌んでください。 React.DOM.*ファクトリ関数はすべおのタグを提䟛しない堎合がありたすが、䞍足しおいるタグにはReact.createFactoryたたはReact.createElement()盎接䜿甚できるはずです。 たたは、 React.createElement()倉換され、すべおのタグを本質的にサポヌトするJSXを䜿甚するこずもできたす。

最も参考になるコメント

xlink:href属性に぀いおはかなり混乱しおいるようです。 珟圚サポヌトされおいたすが、別の方法で蚘述する必芁がありたす。

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

Reactは、0.14.xであっおも、それをxlink:hrefに正しく倉換したす。 䟋に぀いおは、このフィドルを参照しおください。

党おのコメント107件

これに取り組んでいる人はいたすか 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

2069はむメヌゞのサポヌトを芁求したす。

画像サポヌトの+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を詊しお

3945これらのタグはマヌカヌのReactSVGではサポヌトされおいたせんrefx、refy、orient

+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で修正されたした

5714は6243で元に戻されたため、属性のホワむトリストが必芁です。 ただし、幞いなこずに、 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}}/>
このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡