用 ES6 类react静态

IT技术 reactjs ecmascript-6
2021-04-14 16:57:26

静态对象是否与 React 中的 ES6 类一起使用?

class SomeComponent extends React.Component {

  render() {
    // ...
  }

}

React.statics = {
  someMethod: function() {
    //...
  }
};

someMethod当我这样做时,像上面这样的东西给了我未定义的方法SomeComponent.someMethod()

5个回答

statics仅适用于React.createClass. 只需将该方法声明为静态类方法:

class SomeComponent extends React.Component {

  static someMethod() {
    //...
  }

  render() {
    // ...
  }

}

关于

React.statics = { ... }

您实际上是staticsReact对象创建属性该属性不会神奇地扩展您的组件。

这样做我总是会Cannot read property '_currentElement' of null出错,而没有静态修饰符的相同方法可以正常工作。我没有在我的方法中使用任何类变量......
2021-05-23 16:57:26
请注意,static propTypes = {...}babel 和 jsx 工具支持静态属性(例如);但只是 ES7 提案。静态方法是 ES6。
2021-06-10 16:57:26

尽管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(){....}

如果你想像前者那样写,那么你必须stage: 0在 Babel 上进行设置(因为它是实验性的)。

你是对的,这似乎是 ES7 属性初始化符号。facebook.github.io/react/blog/2015/01/27/...
2021-06-05 16:57:26
为了使用 ES7,你必须npm install babel-preset-stage-0然后"stage-0"像这样添加到 .babelrc:{"presets": ["es2015", "react", "stage-0"]}
2021-06-08 16:57:26
请注意,这propTypes = …不是 ES6 符号。
2021-06-18 16:57:26

无需实例化组件即可访问静态。通常它们不是那么有用,但有一些特殊情况。例如,当您通过执行 ACTION PERFORM 离开当前页面时进入路由,然后通过静态方法可以保持/询问用户他是否真的想离开页面。例如:

exampleComponent= React.createClass({
statics:{
        willTransitionFrom: function(transition,component){
            // check any state here or value Aasked the user.
        }
    }
});

它公开 willTransitionTo 和 willTransitionFrom 生命周期方法两者都是特别有用的静态,因为您可以在实例化组件之前实际取消转换。

停止。只需声明一个类而不扩展 React.Component 就可以了。

class YourStaticClass {

   static YourMethod(){

   }

}
export default YourStaticClass;

在其他类中,您可以简单地导入您的类并触发该功能

import YourStaticClass from "whatever";

...
YourStaticClass.YourMethod();
...

statics仅适用于 React 组件,请查看文档

“OP”指的是问题或编写问题的人。也许你只是措辞有点奇怪,因为这绝对是一个 React 组件。它不是用React.createClass.
2021-06-02 16:57:26
这正是你的答案。什么是OP?
2021-06-10 16:57:26
OP 没有反应组件吗?
2021-06-10 16:57:26