Причина (любые изменения, внесенные в массив), чтобы вызвать вызов функции. Ваниль JS - PullRequest
1 голос
/ 12 января 2020

Массив не является элементом DOM:

array = [0, 0, 0, 0, 0];

Он просто висит в индексе. js на данный момент. Клики пользователей, выборка звонков и т. Д. c. может изменить это. Я хочу как-то вызвать любое изменение в массиве, чтобы вызвать вызов функции. Примерно так:

when array.changesInAnyWay(){
doSomething();
}

Контекст:

-Я думаю, Rx JS и, следовательно, наблюдаемые требуют РЕАКТ, который я не могу использовать для этого проекта. Я потратил много времени, пытаясь применить шаблон наблюдателя, но он только сломал страницу и все равно чувствует себя излишним. -Подобное ограничение для MobX. Я просто использую vanilla JS.

Я думаю, что прокси должны быть хорошим решением, но мне трудно понять, как применить их к моему коду. Я пытался подражать тому, что нашел в подобных обсуждениях, но ни один из них не работал.

Обнаружение изменений в массиве Javascript с использованием объекта Proxy https://codeburst.io/understanding-javascript-proxies-by-examining-on-change-library-f252eddf76c2

Я потратил два часа, пытаясь реализовать последнее с помощью этого:

const onChange = require('./js/on-change');
const foo = onChange({
a: generalArray
}, () => console.log(foo));

Может кто-нибудь подтолкнет меня (или напишет!) какой-нибудь реальный код, который работает? Я гуглил и пробовал что-то всю неделю.

1 Ответ

0 голосов
/ 12 января 2020

Я думаю, что вы можете использовать RX JS без реакции, и если вы можете, это звучит как идеальный вариант использования для поведения объекта

Вне этого вы можете создать свой собственный объект поведения с помощью обещаний и обратных вызовов в ванильный JavaScript; для RX JS это просто:

определение:

import { BehaviorSubject } from 'rxjs';
messageSource = new BehaviorSubject(false);
currentMessage = this.messageSource.asObservable();

  changeMessage(message) {
    this.messageSource.next(message);
  }

использование

currentMessage.subscribe(val => {
//logic
})

использовать изменение в ваши сеттеры для классов, и теперь вы сможете слушать любые сделанные изменения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...