У меня есть WebSocket, который передает данные клиенту, и я показываю его (данные) на диаграмме, используя D3 в реакции, поэтому я хочу, чтобы моя диаграмма изменялась в соответствии с данными, но чтобы изменить состояние компонент диаграммы, мне нужно получить к нему доступ из родительского компонента, в котором определено событие onMessage, моя проблема в том, что диаграмма не обновляется:
Родительский компонент:
class App extends Component {
constructor(props) {
super(props);
this.state = {
data: [],
};
}
handleData(data) {
let result = JSON.parse(data);
this.setState((state) => {
state.data.push(result.c.gas);
});
}
render() {
return (
<div>
<Websocket
url={`ws://${window.location.host}/ws/mqtt_app/1/`}
onMessage={this.handleData.bind(this)}
/>
<Chart data={this.state.data} />
</div>
);
}
}
Дочерний компонент:
const Chart = (props) => {
const [data, setData] = useState(props.data);
const svgRef = useRef();
useEffect(() => {
// chart definition
}, [data]);
return (
<React.Fragment>
<svg ref={svgRef}>
<g className="x-axis"></g>
<g className="y-axis"></g>
</svg>
</React.Fragment>
);
};
export default Chart;
Спасибо