我应该在 React 中使用属性(props 或 state 除外)吗?

Should I use properties (other than props or state) in React?

我想知道我是否应该在 React 组件中使用属性(不是 props,不是状态)?

例如,

var myComponent = React.createClass ({
    _text: '',   // Something like this, a property other than props or state
});

优缺点是什么,用例是什么?

属性非常适合存储与视图无关的数据,但对修改行为很有用。

为什么不 statepropsstate 最好在调用 setState 时修改。但是调用 setState 也会调用 render,导致性能开销。虽然,我们可以通过覆盖 componentShouldUpdate 来取消 render 调用,但这让事情变得太复杂了。所以,state 不是最好的地方。 props 似乎是一个不错的候选者,但是,它可能会超出我们的控制范围,因此这也不理想。

示例用例:您在 componentDidMount 中分配了资源,需要清理。这样做的最佳地点是 componentWillUnmount。但是,您将如何密切关注分配了哪些资源?您使用属性。

React.createClass({
  componentDidMount() {
    // `allocateResource` is entirely made up, but functions like it exist.
    this.someResourcePointer = allocateResource();
  },

  componentWillUnmount() {
    // `deallocateResource` is also entirely made up.
    deallocateResource(this.someResourcePointer);
  },

  render() {
    return <div>{/* ... */}</div>;
  }
});

一些现实世界的例子:

  • 订阅和取消订阅事件发射器
  • 有一个 canvas 上下文池,如果你需要生成多个 canvas 上下文