Как я могу вызвать метод из другого класса / компонента в JavaScript? - PullRequest
0 голосов
/ 27 апреля 2019

Я все еще новичок во внешнем интерфейсе. У меня есть 2 НЕ СВЯЗАННЫЕ (нет отношения родитель / ребенок):

search.js
Class Search{
   method,
   state
}

view.js
Class view{
     content
}

Я пытаюсь:

  • вызов метода search.js из view.js .
  • изменить значение состояния search.js с view.js

Дополнительная информация:

Спасибо!

Код:

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

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

Ответы [ 3 ]

3 голосов
/ 27 апреля 2019

Если классы не связаны, то есть только три способа использования методов класса вне класса (или, действительно, внутри него):

  1. Если это static метод, вызовите его напрямую:

    Search.theStaticMethod()
    
  2. Если это прототип или метод экземпляра, обычно нужно создать экземпляр и затем вызвать метод для этого экземпляра:

    const s = new Search(/*...*/);
    s.prototypeOrInstanceMethod();
    
  3. Если это метод-прототип, вы можете вызвать его без создания экземпляра, но весьма вероятно, что будет некорректно , чтобы сделать это:

    // ALMOST CERTAINLY NOT THE RIGHT THING
    Search.prototype.prototypeMethod();
    

    Существует вариант того, где вы применяете метод к объекту, даже если этот объект не был создан с помощью new Search:

    // ALMOST CERTAINLY NOT THE RIGHT THING
    const obj = {};
    Search.prototype.prototypeMethod.call(obj);
    

    Метод получитобъект как this, и может или не может работать правильно в зависимости от того, как он написан.

1 голос
/ 28 апреля 2019

Принимая больше реакции , чем ванильный JS ... вероятно, уже ответил здесь или даже (примитивно) здесь

Iесть 2 класса НЕ СВЯЗАННЫХ (без родительских / дочерних отношений):

Оба в одном дереве экрана / представления / приложения / компонента?Затем косвенно, но все еще связаны.

Я пытаюсь:

  • вызвать метод search.js из view.js.
  • изменить значение состоянияsearch.js из view.js

Существует несколько способов управления общим состоянием (значениями или методами):

  • состояние общего родителя (* 1028)* поднятие состояния ), даже верхний <App /> компонент
  • с использованием ссылок
  • с использованием контекста api
  • redux
  • apollo client

Использование Preact - затем поиск крошечного глобального управления состоянием, например statext или unstated

1 голос
/ 27 апреля 2019

Вам нужен экземпляр класса, как уже отвечено.

const myInstance = new Search();

Вы можете экспортировать этот экземпляр вместо экспорта класса.

export {myInstance};

В view.js его нужно импортировать

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

А потом вы вызываете метод

myInstance.search('someInput');
...