Динамическое обновление функции Getter в объекте - PullRequest
0 голосов
/ 12 ноября 2018

В моем конструкторе состояние установлено как

this.state = {
  selectedProvider: '',
  selectedPort: '',
  selectedNetwork: '',
  networks: {
    MainNet: {
      disabled: false,
    },
    aTestNetwork: {
      get disabled() {
        return this.selectedProvider === 'aProvider';
      },
    },
}

Я использую this.setState() для обновления selectedProvider с помощью функции onClick.Однако значение this.state.selectedProvider, по-видимому, не обновляет значение, возвращаемое функцией получения с именем disabled.

Я использую this.state.networks для отображения сетей в раскрывающемся меню, и я намерен сделать так, чтобы они были перечислены как отключенные или включенные динамически в зависимости от значения this.state.selectedProvider, и, как указано, выглядиткак значение получателя генерируется только один раз.

Как я могу получить возвращаемое значение получателя для динамического обновления?

Редактировать: Удалось правильно присвоить this.selectedProvider значение, используя установщик и вызывая его перед вызовом получателя.

set provider(prov) {
  this.selectedProvider = prov;
},
get disabled() {
  return this.selectedProvider === 'aProvider';
},

1 Ответ

0 голосов
/ 12 ноября 2018

Поскольку this внутри геттера относится к его непосредственному хост-объекту, лучше всего было бы связать контекст:

const self = this;
this.state = {
  selectedProvider: '',
  selectedPort: '',
  selectedNetwork: '',
  networks: {
    MainNet: {
      disabled: false
    },
    aTestNetwork: {
      get disabled () {
        return self.state.selectedProvider === 'aProvider';
      }
    }
  }
};
// test:
console.log(this.state.networks.aTestNetwork.disabled);
this.state.selectedProvider = 'aProvider';
console.log(this.state.networks.aTestNetwork.disabled);
...