2016-09-13 48 views
0

我有以下減速器:如何在我的react-reducer中使用d3.nest?

const initialState = {data1:null, data2:null, isFetching: false,error:null}; 
export const gaData = (state = initialState, action)=>{ 
    switch (action.type) {  
     case 'FETCH_DATA_SUCCESS': 
     return Object.assign(
      {},state, 
     {data1: action.data1, 
     data2: action.data2.map(([x, y, z]) => ({ x, y, z })), 
     isFetching: action.isFetching, 
     error: null }); 
     default:return state; 
    } 
}; 

如何使用d3.nest所以我可以爲data2x值和彙總y價值?

如果我是對的我會做這樣的事情:

var newdata = d3.nest() 
    .key(function(d) { return d.x; }) 
    .rollup(function(d) { return d3.sum(d, function(g) {return g.y;}); }) 
    .entries(data2); 

,但我不知道這樣做,包括這在我的減速器。

+1

目前還不清楚如何在縮減器中使用'newdata'。爲什麼不能將結果分配給新狀態對象的相關部分? –

+0

嗨,湯姆,你說什麼意思_爲什麼你不能只將結果分配給你的新狀態對象的相關部分?_我不明白你。 –

+0

我的意思是我不知道如何在減速器中使用'newdata'。它應該去哪裏?究竟是什麼問題? –

回答

1

這聽起來好像你只是想要做這樣的事情:

case 'FETCH_DATA_SUCCESS': 
     let data2 = action.data2.map(([x, y, z]) => ({ x, y, z })); 
     data2 = d3.nest() 
      .key(function (d) { return d.x; }) 
      .rollup(function (d) { return d3.sum(d, function (g) { return g.y; }); }) 
      .entries(data2); 

然後,你可以返回data2作爲新的國家目標的一部分。

另外,考慮將變量名稱改爲比data2更有意義的東西!