我仍然試圖掌握反應組件生命週期以及何時/何時應該進行調用。我有以下代碼,我需要更新兩個狀態元素,基於綁定到父方法的子組件操作。做這個的最好方式是什麼?我基本上試圖堅持儘可能地將所有數據操作和邏輯放在父容器/容器中。反應重新獲取父組件數據
我在axios調用的url中得到錯誤:Uncaught TypeError: Cannot read property 'state' of undefined(…)
。我想知道如何解決這個錯誤,並且最好的辦法是什麼。每當選定的年份發生變化時,我應該在哪裏撥打電話重新提取數據?
import React from 'react';
import axios from 'axios';
import MonthView from './MonthView.js';
class MonthViewContainer extends React.Component {
constructor() {
super();
this.state = {
data: [],
selectedYear: 2016
}
this.handleAddYear = this.handleAddYear.bind(this);
this.handleSubtractYear = this.handleSubtractYear.bind(this);
}
componentDidMount() {
var self = this;
var defaultYear = this.state.selectedYear
axios.get('http://localhost:3001/api/transfilter?year=' + defaultYear + '&grouping=2')
.then(function (response) {
console.log(response);
self.setState({data: response.data});
})
.catch(function (error) {
console.log(error);
});
}
render() {
return <MonthView data={this.state.data} selectedYear={this.state.selectedYear} onAddYear={this.handleAddYear} onSubtractYear={this.handleSubtractYear} />;
}
handleAddYear() {
const newyear = this.state.selectedYear + 1;
this.setState({selectedYear: newyear}, function() {
console.log(this.state.selectedYear);
});
getTransactions();
}
handleSubtractYear() {
const newyear = this.state.selectedYear - 1;
this.setState({selectedYear: newyear}, function() {
console.log(this.state.selectedYear);
});
getTransactions();
}
}
function getTransactions(){
var self = this;
axios.get('http://localhost:3001/api/transfilter?year=' + this.state.selectedYear + '&grouping=2')
.then(function (response) {
console.log(response);
self.setState({data: response.data});
})
.catch(function (error) {
console.log(error);
});
}
export default MonthViewContainer;
謝謝。這工作。我之前已經設置過它,但問題是我沒有爲我的getTransactions調用提供正確的上下文。此外,我打算切換到Flux模式,但由於我只是在學習,我希望在基礎知識得到紮實處理並在獲得更多「高級」之前發生這些錯誤。 –
我不知道這是否是正確的問題,但問題上的反對票是多少?這是否是因爲格式不正確? –