2016-04-19 59 views

回答

0

,試圖利用這兩個庫一起不幸的是他們與DOM的交互方式。

D3直接選擇元素,然後將數據綁定到這些元素,並根據數據集添加,更新或移除元素。

陣營喜歡有代表的一切在它的虛擬DOM,沒有它的同意,不喜歡實際的DOM的任何變化。

有些人會通過禁用某些生命週期方法和使用功能性副作用來完成D3的方法來解決這個問題。

class ExpenseComponent extends React.Component { 
    componentDidMount() { 
    // wrap element in d3 
    this.d3Node = d3.select(this.getDOMNode()); 
    this.d3Node.datum(this.props.data) 
     .call(ExpenseVisualization.enter); 
    }, 

    shouldComponentUpdate(nextProps) { 
    if (nextProps.data.update) { 
     // use d3 to update component 
     this.d3Node.datum(nextProps.data) 
     .call(ExpenseVisualization.update); 
     return false; 
    } 
    return true; 
    }, 

    componentDidUpate() { 
    this.d3Node.datum(this.props.data) 
     .call(ExpenseVisualization.update); 
    }, 

    render() { 
    // … 
    } 
} 

雖然這適用於某些情況,但您將失去將狀態傳遞給組件可能呈現的任何子組件的好處。

我建議研究一些人如何試圖解決這個問題,這些方法,看問題的根源。

而且,隨意試用這個庫我的朋友和我做,可讓您在現有D3代碼插入原樣,並返回反應的組分,並處理過渡,動畫,定時器等

http://react-d3-library.github.io/

一直在尋找更多反饋!