简而言之
使用React几个月后 - 使用this
跟踪组件中变化的变量的想法已经变得像在北极浮潜一样 - 从来没有人应该这样做。
但是对于Leaflet来说就是这种情况(为了细节,我将跳过,我不能使用现在存在的真正甜蜜的传单组件包装。
导致我this
的问题:
我尝试将初始缩放级别保存为状态的商店,但由于我使用的是更改渲染路径的操作,因此打开{{1}我无法在Map Component
坐骑时调用另一个操作,而不会出现链动作错误"不变调度"。我也无法找到任何异步更新来放大Leaflet Docs来解决同步Actions错误。
没有初始缩放,我无法看到用户进行的第一次缩放是上升还是下降:(
我的黑客解决方案:
由于地图的其余部分保存在MapComponent
中,我刚刚创建了另一个名为this
的{{1}}属性,当this
为this.currenZoom
时,该属性会在组件安装时进行初始化叫做(技术上更新像州)
我的问题:
我是否使用zoomStart
在北极浮潜以保持我的变焦状态?或者这是否可以接受,因为Leaflet在技术上并不是以同样的方式使用虚拟DOM? 在我们的组件中,某些情况下使用this
可以管理变量更新。
注意:这个问题可能会变得非常糟糕,但严重的是,我使用this
和state
花费了很长时间才能感受到MEGA使用{{1在我的组件中。
答案 0 :(得分:1)
我认为将数据直接保存在this
上是好的,当且仅当它不影响渲染时(尽管我不这样做,除非有充分的理由不这样做简单地把它放在组件的状态中)。 render
方法应始终是this.state
和this.props
(以及仅这两件事)的函数。
这样做最常用作“逃生舱”机制 - 就像你在这里提到的场景一样 - 其中一些库,插件或函数不像普通组件那样与虚拟DOM交互
您甚至可以使用此方法in the SetIntervalMixin
mixin example查看React文档:
var SetIntervalMixin = {
componentWillMount: function() {
this.intervals = [];
},
setInterval: function() {
this.intervals.push(setInterval.apply(null, arguments));
},
componentWillUnmount: function() {
this.intervals.forEach(clearInterval);
}
};