如何在javascript中从其他类/组件调用方法?

时间:2019-04-27 09:38:15

标签: javascript reactjs class components preact

我仍然是前端的新秀。我有2个不相关(无父子关系)课程:

search.js
Class Search{
   method,
   state
}

view.js
Class view{
     content
}

我正在尝试:

  • view.js 调用 search.js 方法。
  • view.js
  • 更改 search.js 的状态值

其他信息:

  • 我已经尝试使用helper functions。这不是理想的解决方案。
  • 我正在使用Preact,它是React的轻量级版本。

谢谢!

代码:

export default class Search extends Component {
    constructor() {
        this.state = {
            input: ""
        };
    }

    search(input) {
        this.setState({ input: input });
    }
}

3 个答案:

答案 0 :(得分:3)

如果类是不相关的,那么只有三种方法可以在类外部(或者实际上是在其内部)使用类的方法:

  1. 如果它是stub.handler.handleGetState(.)方法,则直接调用它:

    static
  2. 如果它是原型或实例方法,通常的事情是创建一个实例,然后在该实例上调用该方法:

    Search.theStaticMethod()
    
  3. 如果它是原型方法,则可以 调用它而无需创建实例,但是这样做极有可能不正确

    const s = new Search(/*...*/);
    s.prototypeOrInstanceMethod();
    

    即使您不是通过// ALMOST CERTAINLY NOT THE RIGHT THING Search.prototype.prototypeMethod(); 创建该对象,也可以将方法应用于对象,这有一个变体:

    new Search

    该方法会将对象获取为// ALMOST CERTAINLY NOT THE RIGHT THING const obj = {}; Search.prototype.prototypeMethod.call(obj); ,并且可能会或可能无法正确运行,具体取决于其编写方式。

答案 1 :(得分:1)

您需要一个已经回答的class实例。

const myInstance = new Search();

您可以导出此实例,而不是导出类。

export {myInstance};

在view.js中,您需要导入

import {myInstance} from './relative-path';

然后您调用方法

myInstance.search('someInput');

答案 2 :(得分:1)

比普通js采取的反应更强 ...可能已经回答了here甚至(最初)here

  

我有2个“不相关”(没有父子关系)类:

两者都在同一屏幕/视图/应用/组件树中吗?然后是间接的但仍然相关。

  

我正在尝试:

     
      
  • 从view.js调用search.js方法。
  •   
  • 从view.js更改search.js的状态值
  •   

有几种方法可以管理公共状态(值或方法):

  • 在父级(lifting state up)中声明,甚至在顶部<App />组件中声明
  • 使用裁判
  • 使用上下文API
  • redux
  • 阿波罗客户

使用Preact-然后搜索一些微小的全局状态管理,例如statextunstated