gpt4 book ai didi

javascript - 无法在 React-Redux 中使用 VictoryBar 绘制条形图

转载 作者:行者123 更新时间:2023-11-27 23:19:38 24 4
gpt4 key购买 nike

我无法使用 React 组件胜利库中的 VictoryBar 绘制条形图。我正在使用数据库中的数据,通过 Redux 和 axios 中间件将数据带到前端。

有效负载正在更新,但是 React 组件的状态只会变得更大。来自 1 个国家/地区的数据给出了一个对象数组 = 26。当我再次单击按钮时,它会将对象连接到现在的 52 个对象数组。这会扭曲图表,因为它没有刷新数据。

<小时/>
    import React, { Component } from 'react';
import { connect } from 'react-redux';
import { bindActionCreators } from 'redux';
import { Link } from 'react-router';
import { VictoryChart } from 'victory-chart';
import { VictoryLine } from 'victory-line';
import { VictoryAxis } from 'victory-axis';
import { VictoryBar } from 'victory-bar';
import { getWaterData } from '../actions/get_water_data';
import CountryList from '../containers/countryList';

// console.log('Printing the Water Data', waterData);

var plottingData = [
{ x: '1990', y: 0 },
{ x: '1992', y: 0 },
{ x: '1994', y: 0 },
{ x: '1996', y: 0 },
{ x: '1998', y: 0 },
];
var processWaterData;

class VictoryPlots extends Component {
constructor(props) {
super(props);
getWaterData();
this.update = this.update.bind(this);
this.state = {
processed: plottingData,
count: 2,
countryId: 1,
// waterData: getWaterData(),
};

}

processingData() {
processWaterData = [];

for (var i = 0; i < this.props.waterData.length; i++) {
processWaterData.push({x: this.props.waterData[i].year, y: this.props.waterData[i].value });
}

// return processWaterData;
this.setState({ processed: processWaterData}, function() {
console.log("SET State", this.state.processed);
});

}

// data= { this.state.data } />
// this.props.getWaterData();

onInputChange(pCountry) {
this.setState({ processed: [{x:'1990', y: 100}] });
this.setState({countryId: pCountry}, function() {
console.log("countryID: ", this.state.countryId);
});

}

render() {
return (
<div>

<div>
<input value = { this.state.countryId }
onChange = { event => this.onInputChange(event.target.value)} />
</div>

<Link to="/">Main</Link>

<button onClick = { this.processingData.bind(this) } >
Plot Graph
</button>

<button onClick = { () => { this.props.getWaterData(this.state.countryId);}}>
Water Data
</button>


<VictoryChart >
<VictoryBar
data = { this.state.processed }
dataAttributes= {[
{fill: "cornflowerblue"}
]}
/>
</VictoryChart>
</div>
);

}
}; // End of Component

function mapStateToProps({ waterData }) {
// console.log('WATER STATE:', { waterData });
return { waterData };
}

function mapDispatchToProps(dispatch) {
return bindActionCreators({ getWaterData: getWaterData }, dispatch);
}

export default connect(mapStateToProps, mapDispatchToProps)(VictoryPlots);

胜利栏:VictoryBar Chart for React

我不确定如何更新图表的状态,以便在更新输入框中的输入时更新图表。我正在使用 this.state.processed 更新 VictoryBar 中的信息。 this.props.waterData 是从 Redux Promise 接收的数据,它返回每个国家/地区的正确数据,但随后它会连接到 this.state.waterData,每次我单击“绘图”时。我希望每次单击“绘图”时它都能生成一个新绘图。

<小时/>

这是我的错误,我已经修复了这个问题,并尝试了多种在单击绘图按钮时更新组件状态的方法。为了更清楚起见,我将粘贴我的 Action reducer ,也许还有我试图在此处完成的任务的屏幕截图。

操作 reducer (get_water_data.js)

    import axios from 'axios';

// Send action to server
export const GET_WATER_DATA = 'GET_WATER_DATA';

export function getWaterData(pCountryId) {
// console.log('Calling Water Data Function');

const url = '//localhost:3001/api/statistics/' + pCountryId;
// console.log(url);
const request = axios.get(url);

// console.log('PROMISE:', request.data);

return {
type: GET_WATER_DATA,
payload: request,
};
}

更新的代码可以工作,但是我正在改变数组并且我正在使用拼接,这不是每次我单击“绘图”时在屏幕上呈现新数据的正确方法。我正在寻求以正确的方式实现这一点,但我认为我不知道如何实现。

    processingData() {
var processWaterData = []

for (var i = 0; i < this.props.waterData.length; i++) {
processWaterData.push({x: this.props.waterData[i].year, y: this.props.waterData[i].value });
}

this.setState({ processed: processWaterData}, function() {
// console.log("processed info after: ", this.props.waterData);
if (this.props.waterData.length > 1) {
// console.log("Length of the waterData:", this.props.waterData.length);
this.props.waterData.splice(0, this.props.waterData.length);
}
});
}

VictoryBar Chart showing Improved Water Resources from Countries

最佳答案

看起来像是一个简单的拼写错误:

// return processWaterData;
this.setState({ processed: processed}, function() {

应该是:

// return processWaterData;
this.setState({ processed: processWaterData}, function() {

关于javascript - 无法在 React-Redux 中使用 VictoryBar 绘制条形图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35494095/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com