Reactjs - 在组件中使用 "this" - 应该始终避免吗?

Reactjs - Using "this" in components - should it be avoided at all times?

一言以蔽之

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

但是使用 Leaflet 就会发生这种情况(对于细节我将跳过,我不能使用现在存在的非常好的 leaflet 组件包装器。

导致我this的问题:

我正在尝试将初始缩放级别作为状态保存到商店中,但是由于我使用的是更改渲染路径的操作,因此打开了 Map Component 我无法在 MapComponent 挂载时调用另一个 Action 而不会出现链式 Action 错误 "Invariant Dispatch"。我也找不到任何异步更新来放大传单文档以解决同步操作错误。

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

我的黑客解决方案:

由于地图的其余部分保存在 this 中,我刚刚创建了另一个 this 的 属性,称为 this.currenZoom,它会在组件安装时进行初始化,并在组件安装时进行更新zoomStart被调用。(像状态一样技术更新)

我的问题:

我在北极浮潜时使用 this 来保持缩放状态吗?或者这是可以接受的,因为从技术上讲,Leaflet 不能以相同的方式处理虚拟 DOM? 在我们的组件中使用 this 可以在某些情况下管理变量更新。

注意:这个问题可能会让人觉得很烦人,但说真的,我已经用了很长时间 stateprops 来处理所有事情,使用 this 在我的组件中。

我确实认为将数据直接保存在 this 当且仅当它不影响渲染时(尽管我不会这样做,除非有一个很好的理由不要简单地将它放在组件的状态中)。 render 方法应该 alwaysthis.statethis.props 的函数(并且 only 这两个东西).

这样做最常被用作 "escape hatch" 机制——就像你在这里提到的场景——一些库、插件或函数不与虚拟 DOM 交互和普通组件一样。

您甚至可以使用此方法查看 React 文档 in the SetIntervalMixin mixin example:

var SetIntervalMixin = {
  componentWillMount: function() {
    this.intervals = [];
  },
  setInterval: function() {
    this.intervals.push(setInterval.apply(null, arguments));
  },
  componentWillUnmount: function() {
    this.intervals.forEach(clearInterval);
  }
};