2017-05-27 2 views
0

私はコンポーネントメソッドではD3の折れ線グラフを作成しようとしています:d3はJSの反応 - 「ドキュメント」on「にはcreateElementNS」の実行に失敗しました:提供修飾名が無効な文字が含まれています「」

import React, {Component} from "react"; 
import {observer, inject} from "mobx-react"; 

import {line, select} from "d3" 

@inject("store") 
@observer 
class PriceChart extends Component { 
    constructor(props) { 
    super(props) 
    this.createLineChart = this.createLineChart.bind(this) 
    } 
    componentDidMount() { 
    this.createLineChart() 
    } 
    componentDidUpdate() { 
    this.createLineChart() 
    } 
    createLineChart() { 

    const data = [ 
     { 
     price: 100 
     }, { 
     price: 200 
     } 
    ] 

    const node = this.node 

    const priceLine = line().x((d) => 1).y((d) => d.price) 

    select(node).append(priceLine(data)) 
    } 
    render() { 
    return <svg ref={node => this.node = node} width={800} height={800}></svg> 
    } 
} 

export default PriceChart; 

しかし、私は次のエラーが発生しています:

Failed to execute 'createElementNS' on 'Document': The qualified name provided ('M1,100L1,200') contains the invalid character ','..

ここから値M1、L1はどこから来ますか? d3がエラーの原因となっているデータに値を追加しているようですか?

+0

タイムスタンプは、あなたがGR私は私の入力で周りのビットを再生してみました – Pineda

+0

@Pinedaしている理由である、あなたにD3チャートを使用するには、有効な番号と見なされていないように思えます - すべての価格を固定数に変更し、すべてのタイムスタンプをUnixタイムスタンプに変更した後、x関数を常に1に変更しましたが、私はいつもこのエラーのいくつかのバリエーションを取得します - 無効な文字 '、'を含みます.. –

+0

@ Pinedaは問題をもっと簡単な例に編集したが、それでも問題を示している –

答えて

0

この...

const priceLine = line().x((d) => 1).y((d) => d.price) 

... ラインジェネレータです。

したがって、どのようなことがないことはこれです:あなたはそれを渡すと、与えられたデータ配列...

priceLine(data) 

...それはコマンドパスを持つ文字列を返します。このように:

"M1,100L1,200" 

したがって、この文字列をSVG要素として追加するのはほとんど意味がありません。

ソリューション

あなたがここに欲しい何がパス要素を追加することであり、そのd属性としてこの文字列を設定します。したがって、それは次のようになります。

select(node).append("path")//append a path here 
    .attr("d", priceLine(data))//and set its d attribute 
関連する問題