2016-10-25 5 views
1

私は以下のコードを持っています。 2つのconsole.logに気付いてください。 <ChartTitle>コンポーネントの別の子の中から_getChartData()関数を呼び出しています。React ES6コンポーネントは再販されていません

_getChartData()をもう一度呼び出すと、下のコードの子コンポーネントが再レンダリングされないという問題があります。私はそこにsetStateのためにそうすることを期待しています。

export default class PerformanceChart extends React.Component { 

    constructor(props) { 
     super(props); 
     this.state = { chart_data: [] }; 
     this._getChartData(); 
    } 

    componentDidMount() { 
     this._getChartData(); 
    } 

    _getChartData(d = 30) { 

     console.log('running setState for chart data'); 

     // AJAX GOES HERE 
     this.setState = ({ 
      chart_data : [ 
       ['x', '2016-01-01', '2016-03-01', '2016-04-01', '2016-05-01', '2016-06-01', '2016-07-01', '2016-08-01'], 
       ['Clicks', Math.random(), 200, 100, 400, 150, 250, 125, 600], 
       ['Orders Reported', 300, 250, 100, 400, 150, 250, 40, 300], 
       ['totals', [1050, 5042]] 
      ] 
     }); 

    }; 

    render() { 

     console.log('re-rendering!'); 

     return (

      <div> 
       <ChartTitle chart_data={this.state.chart_data} getChartData={this._getChartData.bind(this)} /> 
       <Chart chart_data={this.state.chart_data} /> 
      </div> 

     ); 
    } 

}; 

これは私が私のコンソールで得るものです:

My console logs

+1

componentDidMount以外の_getChartDataはいつ実行していますか? –

+0

@IlanHasanovレンダリング内の子コンポーネント内から: 'getChartData = {this._getChartData.bind(this)} ' –

+1

すべてのコードを共有できますか? // AJAXはこちらを表示します.setState()はすべてのコンポーネントのコードをすべて追加します –

答えて

3

私はこれがあなたの問題

this.setState = ({ 

setStateが関数であると思いますが、あなたは割り当て、それをしませ呼び出す必要がありますそれ、すなわち:

this.setState({ 
    chart_data : [ 
     ['x', '2016-01-01', '2016-03-01', '2016-04-01', '2016-05-01', '2016-06-01', '2016-07-01', '2016-08-01'], 
     ['Clicks', Math.random(), 200, 100, 400, 150, 250, 125, 600], 
     ['Orders Reported', 300, 250, 100, 400, 150, 250, 40, 300], 
     ['totals', [1050, 5042]] 
    ] 
}); 
+0

あなたは人生の節約者です!これで一日中使いました!私はそれを逃したとは信じられない。本当にありがとう!ここにいくつかの<3。 –

関連する問題