Я работаю над гибким компонентом утилиты, чтобы сделать несколько реагирующих на реакцию компонентов D3. Однако глубокое знание SVG ускользает от меня. Я основал свою отзывчивую утилиту на this issue on github. Однако он не совсем работает. Все, что он делает, отображает диаграмму, но не на width
или height
, а на очень маленькой ширине и высоте. Он также не изменяет размер.Выполнение SVG в ответном порядке
import React from 'react';
class Responsive extends React.Component{
constructor() {
super();
this.state = {
size: {
w: 0,
h: 0
}
}
}
componentDidMount() {
window.addEventListener('resize', this.fitToParentSize.bind(this));
this.fitToParentSize();
}
componentWillReceiveProps() {
this.fitToParentSize();
}
componentWillUnmount() {
window.removeEventListener('resize', this.fitToParentSize.bind(this));
}
fitToParentSize() {
let elem = this.findDOMNode(this);
let w = elem.parentNode.offsetWidth;
let h = elem.parentNode.offsetHeight;
let currentSize = this.state.size;
if (w !== currentSize.w || h !== currentSize.h) {
this.setState({
size: {
w: w,
h: h
}
});
}
}
render() {
let {width, height} = this.props;
width = this.state.size.w || 100;
height = this.state.size.h || 100;
var Charts = React.cloneElement(this.props.children, { width, height});
return Charts;
}
};
export default Responsive;
Responsive width={400} height={500}>
<XYAxis data={data3Check}
xDataKey='x'
yDataKey='y'
grid={true}
gridLines={'solid'}>
<AreaChart dataKey='a'/>
<LineChart dataKey='l' pointColor="#ffc952" pointBorderColor='#34314c'/>
</XYAxis>
</Responsive>
использовать атрибут Viewbox сделать SVG отзывчивым. –
@RobertLongson вы могли бы уточнить, пожалуйста? –
Каким образом я должен разработать? –