我应该在 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
});
优缺点是什么,用例是什么?
属性非常适合存储与视图无关的数据,但对修改行为很有用。
为什么不 state
或 props
? state
最好在调用 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 上下文
我想知道我是否应该在 React 组件中使用属性(不是 props,不是状态)?
例如,
var myComponent = React.createClass ({
_text: '', // Something like this, a property other than props or state
});
优缺点是什么,用例是什么?
属性非常适合存储与视图无关的数据,但对修改行为很有用。
为什么不 state
或 props
? state
最好在调用 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 上下文