【问题标题】:How should functions be written within a React class?在 React 类中应该如何编写函数?
【发布时间】:2016-08-09 16:14:09
【问题描述】:

我正在尝试改编来自a SO answer 的代码,函数和变量编写如下:

const getIntervals = n=> availability=> {
}

let availability = [
]

这些通常可以在反应类中使用(见下文)还是需要重写?

class Calendar extends React.Component {}

询问的原因是我使用了一个 React 实现 for Rails 并且确实收到了一个错误,包括该函数和变量命名模式。

【问题讨论】:

    标签: javascript ruby-on-rails reactjs ecmascript-6


    【解决方案1】:

    纯函数,不修改传递的值,在任何地方都可以使用。

    直接在 React 类中使用它们也很好,但是像字符串修改、数组排序算法这样的常用函数,你在你的应用程序和类中使用很多,应该放在一个单独的模块中,比如

    // my-helpers.js
    
    export const countKeysInObject = (data) => {
      if (typeof data !== "object" || Array.isArray(data)) return 0;
    
      Object.keys(data).length;
    }
    

    一些其他文件..

    import { countKeysInObject } form 'my-helpers'
    // And you can use it everywhere..
    

    【讨论】:

    【解决方案2】:

    如果您使用class 并扩展Component,您可以对大多数事情使用简单的方法:

    class Calendar extends React.Component {
      constructor(props) {
        this.date = props.date;
      }
    
      render() {
        return <span>{this.date.toString()}</span>;
      }
    }
    
    Calendar.propTypes = {
      date: React.PropTypes.date.isRequired
    };
    

    如果您使用对象字面量,则不能使用 propTypes 或任何可能是初始字段的方法。这些需要在类被声明后(propTypes)或在构造函数中(初始state)附加。

    【讨论】:

    • 那么问题中提供的代码应该如何转换才能工作呢?
    • @FellowStranger 使用方法,除非它是等效对象字面量组件的属性(不是方法)。
    • 另一种选择是stateless functional component
    • 我是菜鸟。只是想从你@ssube 那里知道,为什么propTypes 你没有在课堂上定义?
    • @ArupRakshit class 在类声明或构造函数中不支持createComponent({propTypes: {...}}) 的等价物,因此您需要在声明类后使用Foo.propTypes。 React 有 an example here
    猜你喜欢
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 2021-07-02
    • 1970-01-01
    • 1970-01-01
    • 2012-12-13
    • 2019-08-19
    • 1970-01-01
    相关资源
    最近更新 更多