静态对象是否适用于React中的ES6类?
class SomeComponent extends React.Component {
render() {
// ...
}
}
React.statics = {
someMethod: function() {
//...
}
};
当我执行someMethod
SomeComponent.someMethod()
答案 0 :(得分:60)
statics
仅适用于React.createClass
。只需将方法声明为静态类方法:
class SomeComponent extends React.Component {
static someMethod() {
//...
}
render() {
// ...
}
}
关于
React.statics = { ... }
您实际上是在statics
对象上创建React
属性。该属性不会神奇地扩展您的组件。
答案 1 :(得分:23)
虽然statics
仅适用于React.createClass
,但您仍可以使用ES6表示法编写静态方法。如果您使用的是ES7,那么您也可以编写静态属性。
您可以这样在ES6 +类中编写静态:
class Component extends React.Component {
static propTypes = {
...
}
static someMethod(){
}
}
或者像这样的课外:
class Component extends React.Component {
....
}
Component.propTypes = {...}
Component.someMethod = function(){....}
如果你想像前一样写它,那么你必须在Babel上设置stage: 0
(自实验以来)。
答案 2 :(得分:1)
无需实例化组件即可访问统计信息。通常情况下,它们没有什么用处,但是有一些特殊情况。例如,当您通过执行ACTION PERFORM离开当前页面时进入路由,然后通过Statics方法,您可以保留/询问用户是否真的要离开该页面。 例如:
exampleComponent= React.createClass({
statics:{
willTransitionFrom: function(transition,component){
// check any state here or value Aasked the user.
}
}
});
它公开了生命周期方法willTransitionTo和willTransitionFrom 。两者都作为静态变量特别有用,因为您实际上可以在实例化组件之前取消过渡。
答案 3 :(得分:-6)
statics
仅适用于React组件check docs。