1

私は、Victory のチャート作成ライブラリを React で使用して、次のように Animating Circular Progress バーをレンダリングする作業を行っています。

https://formidable.com/open-source/victory/gallery/animation-circular-progress-bar

これが私のコードです:

import React from 'react';
import {connect} from 'react-redux';
import {VictoryPie, VictoryAnimation, VictoryLabel} from 'victory';




class YourRatings2 extends React.Component {

  constructor() {
    super();
    this.state = {
      percent: 25, data: this.getData(0)
    };
  }

  componentDidMount() {
    let percent = 25;
  }

  getData(percent) {
    return [{x: 1, y: percent}, {x: 2, y: 100 - percent}];
  }

  render() {
      return (
        <section className="YourRatings">
          <h2>Core Skills</h2>

            <div>
              <svg viewBox="0 0 400 400" width="100%" height="100%">
                <VictoryPie
                  animate={{duration: 1000}}
                  width={400} height={400}
                  data={this.state.data}
                  innerRadius={120}
                  cornerRadius={3}
                  labels={() => null}
                  style={{
                    data: { fill: (d) => {
                      const color = d.y > 30 ? "green" : "red";
                      return d.x === 1 ? color : "transparent";
                    }
                   }
                  }}
                />
                <VictoryAnimation duration={1000} data={this.state}>
                  {(newProps) => {
                    return (
                      <VictoryLabel
                        textAnchor="middle" verticalAnchor="middle"
                          x={200} y={200}
                        text={`${Math.round(newProps.percent)}%`}
                        style={{ fontSize: 45 }}
                      />
                    );
                  }}
                </VictoryAnimation>
              </svg>
            </div>

        </section>
      );
  }
}

const mapStateToProps = state => {
  return {
  };
};

export default connect(mapStateToProps)(YourRatings2);

残念ながら、これは完全なグラフではなく、テキストのみをレンダリングしています。見る:

ここに画像の説明を入力

私が間違っていることについての指針はありますか?

4

2 に答える 2

1

私はこのライブラリの専門家ではありませんが、あなたが与えた例にはthis.state.data、新しいパーセンテージで更新する間隔関数があります。初期パーセンテージを 0 に設定し、更新していません。

例のように間隔を設定するか、以下の例で初期状態を設定すると、問題が解決するはずです。

constructor() {
  super();
  this.state = {
    percent: 25,
    data: this.getData(25)
  };
}
于 2017-10-01T22:20:38.453 に答える