我有一个在做setState的onWheel处理程序,它引起的布局比绘画要多:
…通过将事件值更改批处理为一个setState来避免这种情况的任何良好模式?
(我以为这个内置组件有些神奇.)
解决方法:
就我而言,这似乎可行.将更改缓存在onWheel处理程序中,然后使用requestAnimationFrame进行调度以进行计算并实际执行setState.
...
zoomFactor: 0,
zoomX: 0,
zoomY: 0,
onWheel: function (event) {
this.zoomFactor += event.deltaY;
this.zoomX = event.nativeEvent.pageX;
this.zoomY = event.nativeEvent.pageY;
requestAnimationFrame(this.scheduleZoom);
},
scheduleZoom: function () {
var scale = ...; // Calc new scale, x, and y
this.zoomFactor = 0;
this.setState({
scale: scale,
x: x,
y: y
});
},
...
有关批处理所有更改的较低级别的选项,请参见https://github.com/petehunt/react-raf-batching