Reactjs - 使用"这个"在组件中 - 是否应该始终避免?

时间:2015-12-11 05:52:44

标签: reactjs this state flux reactjs-flux

简而言之

使用React几个月后 - 使用this跟踪组件中变化的变量的想法已经变得像在北极浮潜一样 - 从来没有人应该这样做。

但是对于Leaflet来说就是这种情况(为了细节,我将跳过,我不能使用现在存在的真正甜蜜的传单组件包装。

导致我this的问题:

我尝试将初始缩放级别保存为状态的商店,但由于我使用的是更改渲染路径的操作,因此打开{{1}我无法在Map Component坐骑时调用另一个操作,而不会出现链动作错误"不变调度"。我也无法找到任何异步更新来放大Leaflet Docs来解决同步Actions错误。

没有初始缩放,我无法看到用户进行的第一次缩放是上升还是下降:(

我的黑客解决方案:

由于地图的其余部分保存在MapComponent中,我刚刚创建了另一个名为this的{​​{1}}属性,当thisthis.currenZoom时,该属性会在组件安装时进行初始化叫做(技术上更新像州)

我的问题:

我是否使用zoomStart在北极浮潜以保持我的变焦状态?或者这是否可以接受,因为Leaflet在技术上并不是以同样的方式使用虚拟DOM? 在我们的组件中,某些情况下使用this可以管理变量更新。

注意:这个问题可能会变得非常糟糕,但严重的是,我使用thisstate花费了很长时间才能感受到MEGA使用{{1在我的组件中。

1 个答案:

答案 0 :(得分:1)

我认为将数据直接保存在this 上是好的,当且仅当它不影响渲染时(尽管我不这样做,除非有充分的理由不这样做简单地把它放在组件的状态中)。 render方法应始终this.statethis.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);
  }
};