각 사용자에게 고유 한 값을 사용하여 각 사용자와 관련된 원형 차트를 렌더링하는 구성 요소가 있습니다. 특정 사용자의 이름을 클릭하면 지정된 사용자의 값으로 파이 차트가 다시 렌더링됩니다. 대신 첫 번째 클릭시 지연되고 다른 사용자를 클릭 할 때까지 업데이트되지 않습니다. 예를 들어 (제공된 링크를 사용하여) 사용자 'Bob Dickinson'을 클릭하면 파이 차트는 다음 사용자 'Eugine Smith'가 다시 클릭 할 때까지 렌더링되지 않습니다. 그러면 Bob Dickinson에 관한 데이터가 렌더링되지만 Eugine Smith의 이름 아래에 표시됩니다 , 그 후 컴포넌트는 각 렌더링시에 뒤쳐집니다. 나는 아래의 코드와 라이브 예에 대한 링크를 나열했습니다구성 요소가 동기화되지 않음
링크 : https://2b0057e3.ngrok.io/dashboard
StudentGraph 구성 요소 :
import React from 'react';
import { Link } from 'react-router';
import { FormattedMessage } from 'react-intl';
import chart from 'chart.js';
export default class StudentGraph extends React.PureComponent { // eslint-disable-line react/prefer-stateless-function
constructor(props) {
super(props);
this.plot = this.plot.bind(this);
}
plot(){
var ctx = document.getElementById("graph2");
var data = {
labels: [
"Budget Used",
"Budget Remaining"
],
datasets: [
{
data: [this.props.budgetUsed,this.props.budgetRemain ],
backgroundColor: [
"#FF6384",
"#90ee90"
],
hoverBackgroundColor: [
"#36A2EB",
"#36A2EB"
]
}]
};
var myChart = new Chart(ctx, {
type: 'pie',
data: data
});
}
componentWillUpdate(){
this.plot()
}
render() {
return (
<div>
<h3>Budget Started: 10,250.00</h3>
<h3>Budget Used: {this.props.budgetUsed}</h3>
<h3>Budget Remaining: {this.props.budgetRemain}</h3>
<div style = {{ width: '20%'}}>
<canvas id="graph2" width="100" height="100"></canvas>
</div>
</div>
);
}
}
문제점을 파악했습니다. 소품을 업데이트하고 있었지만 구성 요소 수명주기 방법을 기반으로 한 오래된 소품 값을 사용하고있었습니다. 대신 componentDidUpdate로 전환하고 이전에 생성 된 값을 사용하지 않고 새 소품을받습니다. –