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
可以在某些情况下管理变量更新。
注意:这个问题可能会让人觉得很烦人,但说真的,我已经用了很长时间 state
和 props
来处理所有事情,使用 this
在我的组件中。
我确实认为将数据直接保存在 this
当且仅当它不影响渲染时(尽管我不会这样做,除非有一个很好的理由不要简单地将它放在组件的状态中)。 render
方法应该 always 是 this.state
和 this.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);
}
};
一言以蔽之
使用 React 几个月后 - 使用 this
来跟踪组件中不断变化的变量的想法感觉就像在北极浮潜 - 从来没有人应该这样做。
但是使用 Leaflet 就会发生这种情况(对于细节我将跳过,我不能使用现在存在的非常好的 leaflet 组件包装器。
导致我this
的问题:
我正在尝试将初始缩放级别作为状态保存到商店中,但是由于我使用的是更改渲染路径的操作,因此打开了 Map Component
我无法在 MapComponent
挂载时调用另一个 Action 而不会出现链式 Action 错误 "Invariant Dispatch"。我也找不到任何异步更新来放大传单文档以解决同步操作错误。
如果没有初始缩放,我无法看到用户进行的第一次缩放是向上还是向下:(
我的黑客解决方案:
由于地图的其余部分保存在 this
中,我刚刚创建了另一个 this
的 属性,称为 this.currenZoom
,它会在组件安装时进行初始化,并在组件安装时进行更新zoomStart
被调用。(像状态一样技术更新)
我的问题:
我在北极浮潜时使用 this
来保持缩放状态吗?或者这是可以接受的,因为从技术上讲,Leaflet 不能以相同的方式处理虚拟 DOM? 在我们的组件中使用 this
可以在某些情况下管理变量更新。
注意:这个问题可能会让人觉得很烦人,但说真的,我已经用了很长时间 state
和 props
来处理所有事情,使用 this
在我的组件中。
我确实认为将数据直接保存在 this
当且仅当它不影响渲染时(尽管我不会这样做,除非有一个很好的理由不要简单地将它放在组件的状态中)。 render
方法应该 always 是 this.state
和 this.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);
}
};