【问题标题】:writing function outside of a class in react component在反应组件中的类之外编写函数
【发布时间】:2018-05-19 23:19:02
【问题描述】:

我见过这样的代码

function abc(){
  return 'abc'
}
class MyComponent extends React.Component {
    static abc = abc;
    render() { return <h1>{this.abc}</h1>; }
}

函数abc 在反应类之外定义。我不知道作者为什么这样做,为什么不能在课堂上这样做?

【问题讨论】:

标签: javascript reactjs ecmascript-6 es6-class


【解决方案1】:

这些是ES6 static methods,并不是 React 独有的。它们是组件类的成员,而不是组件实例的成员。它们在 React 中没有广泛使用,但它们可能很有用。甚至在React docs中提到:

有时在 React 组件上定义静态方法很有用。 例如,中继容器将静态方法 getFragment 暴露给 促进 GraphQL 片段的组合。

它们可以用作组件的公共成员,由它的所有实例共享。给你一个想法,其他static members of a React classdisplayNamedefaultProps

另见Static methods in React。如您所见,使用静态方法的情况并不多。

【讨论】:

  • 另见teamtreehouse.com/community/…,尤其是该页面上的第三个答案
  • 所以你在上述情况下暴露了'abc'函数?
  • 我不知道你所说的暴露是什么意思,但是是的,你可以从MyComponent的任何实例中调用它
  • 但是在类外定义函数abc()的原因是什么?为什么不将其定义为类内部的静态方法?
  • @kost 就像 OP 所说的那样。你说的也没什么不同
【解决方案2】:

一方面,在类之外声明函数更容易导出。这在测试您的反应应用程序时非常有用,即通过开玩笑。

【讨论】:

    【解决方案3】:
    import React, { Component } from 'react';
    
    class Contacts extends Component {
    
        render() {
            return (
                Contact()
            );
        }
    }
    const Contact = () => {
        return (
            <div>
                <p>Contactssssss</p>
            </div>
        );
    };
    
    export default Contacts;
    

    【讨论】:

    • 你不应该只写代码答案。请详细说明并解释为什么您的代码正确且值得质疑(从长远来看会更有用)。
    • 解释你的代码的功能,它的目的是修复什么以及它到底做了什么,这将使你的答案提高十倍。这可能是解决某人问题的方法,但是,更多的新手和中级程序员可能无法解释您的代码究竟完成了什么。因此,对于无法从裸代码中获得理解的任何人来说,它实际上毫无用处。感谢您的贡献。
    猜你喜欢
    • 2021-02-15
    • 2020-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-10-12
    • 2021-09-29
    • 2021-02-26
    相关资源
    最近更新 更多