# Валидация изменений

Валидация работает также как и в примитиве с помощью Proxy. Единственная деталь, что проверку свойства __proto__ не производим по причинам, которые мы обсуждали в теме запрета изменений в массиве.

# Класс








 





 








class ValidatedArray {
  _arr = [0, 1, 2];

  get arr() {
    return new Proxy(this._arr, {
      set(obj, prop, value) {
        // Записываем, если значение - это число ИЛИ свойство - это __proto__
        if (typeof value === 'number' || prop === '__proto__') {
          obj[prop] = value;

          return true;
        }

        throw new TypeError('Value must be number');
      }
    })
  }
}

const instance = new ValidatedArray();

export default instance;

# Компонент

<template>
  <div class="component-block">
    <span class="name">ValidatedArrayOne</span>

    <span><b>Значение arr:</b> {{ arr }}</span><br/>

    <button @click="addString">Добавить строку</button><br />
    <button @click="addNumber">Добавить число</button><br />

    <span v-if="error">{{ error }}</span>
  </div>
</template>

<script>
import ValidatedArray from '@example-services/ValidatedArray';

export default {
  data() {
    return {
      arr: ValidatedArray.arr,
      error: '',
    };
  },
  methods: {
    addNumber() {
      this.arr.push(3);
    },
    addString() {
      try {
        this.arr.push('I don\'t work');
      } catch (e) {
        this.error = e;
      }
    }
  },
}
</script>

# Результат

ValidatedArrayOne Значение arr: [ 0, 1, 2 ]


ValidatedArrayTwo Значение arr: [ 0, 1, 2 ]
Обновлено: 12/12/2022, 3:53:53 PM