Является ли Mutating Data Data объекта Prop лучше, чем мутация prop?Зачем? - PullRequest
0 голосов
/ 01 июля 2019

В документах Vue есть раздел об одностороннем потоке данных: https://vuejs.org/v2/guide/components-props.html#One-Way-Data-Flow

Здесь объясняется, что вы не должны мутировать проп.Кроме того, он говорит:

Пропеллер используется для передачи начального значения;потом дочерний компонент хочет использовать его как локальное свойство данных.В этом случае лучше всего определить локальное свойство данных, которое в качестве начального значения использует проп:

В нижней части этого раздела есть примечание:

Обратите внимание, что объекты и массивы в JavaScript передаются по ссылке, поэтому, если свойство является массивом или объектом, изменение объекта или массива внутри дочернего компонента повлияет на родительское состояние.

IЯ рассматриваю ситуацию, когда у вас есть реквизит, который является объектом (или массивом), и вы определили свойство локальных данных, которое использует реквизит в качестве исходного значения:

props: {
        initialMyObject: {
            type: Object,
            required: true
        }
    },

data() {
    return {
        myObject: this.initialMyObject
    }
}

Если я изменю данныевещь myObject, так как это объект, сам пропеллер будет мутирован.Следовательно, это то же самое, что «мутирование опоры» и чего следует избегать?Желательно ли в этом случае генерировать событие всякий раз, когда требуется изменить объект (или использовать Vuex)?

Заранее спасибо за помощь в этом.

1 Ответ

1 голос
/ 02 июля 2019

Вы можете просто клонировать его, хотя -

data() {
    return {
        myObject: {...this.initialMyObject}
    }
}

Чтобы этого избежать.

Но да, вы просто не можете переназначить значение на prop как

Это просто потому, что Object является эталонной памятью. Если в любой переменной хранится массив или объект, это ссылочная переменная.

Управление памятью в таком случае. Переменная-ссылка будет указывать на адрес памяти в куче, чтобы вы могли добавить еще n и более значений к адресу. Однако вы не можете просто заменить этот адрес каким-либо новым значением, даже новым.

В моем предпочтении, вы должны предпочесть Vuex всякий раз, когда вы хотите обновить значение для всего проекта

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