2016-10-11 7 views
1

divをドットグリッドパターンで提供するコンポーネントがあります。Inline SVGの背景イメージがReact.jsで動作しない

作業を行う必要があります関数は次のようになります。

drawSquareDotGrid(distance, unit, colour){  
     var newGrid = "data:image/svg+xml;utf8,<svg width=\""+distance+unit+"\" height=\""+distance+unit+"\"><circle cx=\"4mm\" cy=\"4mm\" r=\"0.3mm\" fill=\""+colour+ "\"/></svg>" 
     this.setState({grid: newGrid }) 
    } 

を、これは私のレンダリング機能である:

render() { 
    const windowHeight = window.innerHeight - 105 
    const sx = {width: "100%", 
       height: windowHeight, 
       backgroundImage: 'url('+ this.state.grid +')'} 
    return (
     <div style={sx}></div> 
    ) 
    } 

はSVGを持つ文字列が生成されたHTMLしかし、それやや作品には表示されません。もし私がより単純なSVGをこのように使用するならば:

var newGrid = "data:image/svg+xml;utf8,<svg><circle></svg>" 

どのようにこれを修正するのですか?

ありがとうございました!

Rostaの

+0

の特殊文字をエンコードするようにしてください:

固定コードは次のようになります。これを行うには、 'window.encodeURIComponent'を使用してください。 – Kaiido

+0

@Kaiidoあなたの答えをありがとう。私はこの機能を文字列全体と特殊文字の両方に使用しようとしました。何の効果もないようです。 – Gotty

+0

@ Kaiidoあなたは結局のところ、SVGヘッダーからviewPortとxlmnsが欠落していました。もう一度感謝:) – Gotty

答えて

0

@KaiidoはURIがwindow.encodeURIComponentで符号化されるべきで指摘したように。また、SVGヘッダーにxlmnsおよびviewPort情報が欠落していました。

drawSquareDotGrid(distance, unit, colour){ 
    var prefix = "data:image/svg+xml;charset=UTF-8," 
    var grid = "<svg width=\""+distance+unit+"\" height=\""+distance+unit+"\" viewPort=\"0 0 5mm 5mm\" xmlns=\"http://www.w3.org/2000/svg\"><circle cx=\"4mm\" cy=\"4mm\" r=\"0.3mm\" fill=\""+colour+ "\"/></svg>" 
    var newGrid = prefix + window.encodeURIComponent(grid) 
    this.setState({grid: newGrid }) 
} 
関連する問題