我正在使用chart.js
实时显示backend
的价格变化。
Backend
更改为frontend
后会发送新价格。
priceData
(数组)保存在mobx
priceChartStore
中。
价格更改后,我必须更新chart
。
我使用ref
标签的canvas
值绘制价格图表。
问题是,除非我在componentDidUpdate
函数中调用了priceData
值,否则不会调用render
函数,即使该函数未在其中使用render
功能。
有效:
componentDidUpdate() {
const { priceChartStore: { priceData } = this.props;
...
// update chart
this.chart = new LineChart({
el: this.el,
priceData,
config: {
liveMode: true,
startTime,
endTime,
maxDataLength: MAX_PRICES_LENGTH,
},
});
...
}
// render function
render() {
const {
priceChartStore: { priceData }, // never used in render function
} = this.props;
return (
<ChartCanvasWrapper>
<canvas ref={el => (this.el = el)} />
</ChartCanvasWrapper>
);
}
它不起作用:
// render function
render() {
// const {
// priceChartStore: { priceData }, // never used in render function
// } = this.props;
return (
<ChartCanvasWrapper>
<canvas ref={el => (this.el = el)} />
</ChartCanvasWrapper>
);
}
mobx
是这样工作还是我的错?
注意:我确定priceChartStore
中没有错误或问题,并将其注入到此component
中。
答案 0 :(得分:1)
这是mobx
的反应方式(与react-mobx)
将组件类或独立的渲染函数转换为反应组件,该组件跟踪渲染使用的可观察对象,并在这些值之一发生更改时自动重新渲染组件。
因此mobx
仅跟踪variables
函数中使用的render
,并在它们更改时引起重新渲染。