首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >调用类中的一个方法-- React ES6

问调用类中的一个方法-- React ES6
EN

Stack Overflow用户
提问于 2017-05-29 06:31:37
回答 3查看 9.1K关注 0票数 2

我有以下的反应类

代码语言:javascript
复制
export default class ValClass { 
    getValue (key) {
       return key;
    }
}

import React from 'react'
import ValClass from 'valclass'

export class Content extends React.Component {       

    render() {
        let value = ValClass.getValue(this.props.valueKey);
        return <span dangerouslySetInnerHTML={{__html: value}} />
    }
}

但我有以下错误: TypeError:_valClass2.default.getValue不是一个函数。

如果我像这样编码

代码语言:javascript
复制
export default class ValClass { }
ValClass.getValue (key) {
   return key;
}

import React from 'react'
import ValClass from 'valclass'

export class Content extends React.Component {       

    render() {
        let value = ValClass.getValue(this.props.valueKey);
        return <span dangerouslySetInnerHTML={{__html: value}} />
    }
}

那它就正常工作了。多么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2017-05-29 06:39:07

原因是,您将函数定义为静态,直接使用这关键字将无法访问。

根据文档

静态方法调用直接在类上进行,不能在类的实例上调用。 静态方法不能使用来自非静态方法的这关键字直接访问.您需要使用类名: CLASSNAME.STATIC_METHOD_NAME()或调用方法作为构造函数: this.constructor.STATIC_METHOD_NAME()的属性来调用它们。 为了在同一类的另一个静态方法中调用静态方法,可以使用这关键字。

在这种情况下,我认为您不需要static方法,而不是将其定义为static,编写如下所示:

​

代码语言:javascript
复制
class Content extends React.Component {

   getValue() {
      return "<div> Hello </div>";
   }

   render() {
      let value = this.getValue();
      return <div dangerouslySetInnerHTML={{__html: value}} />
   }
}

ReactDOM.render(<Content/>, document.getElementById('app'))
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

<div id='app'/>

​

更新:

您更改了最初的问题,如果您定义了另一个类并想调用其中的一个函数,那么您需要将其定义为静态的。

​

代码语言:javascript
复制
class Content extends React.Component {

   render() {
      let value = App.getValue();
      return <div dangerouslySetInnerHTML={{__html: value}} />
   }
}

class App {
   static getValue() {
      return "<div> Hello </div>";
   }
}

ReactDOM.render(<Content/>, document.getElementById('app'))
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

<div id='app'/>

​

票数 3
EN

Stack Overflow用户

发布于 2017-05-29 07:13:42

如果要在调用static时在静态上下文中使用getValue,请添加ValClass.getValue关键字。

​

代码语言:javascript
复制
class ValClass { 
    static getValue (key) {
        return key;
    }
}

class Content extends React.Component {
   render() {
       let value = ValClass.getValue(this.props.valueKey);
       return <span dangerouslySetInnerHTML={{__html: value}} />
   }
}

ReactDOM.render(<Content valueKey="<strong>Hello</strong>" />, document.getElementById('app'))
代码语言:javascript
复制
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>

<div id='app'/>

​

票数 2
EN

Stack Overflow用户

发布于 2017-05-29 06:38:42

您必须用“this.constructor”调用静态方法。

所以这会是

代码语言:javascript
复制
this.constructor.getValue(this.props.valueKey);
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44235927

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档