Вычисляемые свойства Vue3
Вычисляемые свойства используются для динамического вычисления производных значений свойств на основе изменений в других данных, и они имеют механизм кэширования; они пересчитываются только при изменении связанных зависимостей.
Ключевое слово вычисляемого свойства:computed。
Вычисляемые свойства очень полезны при работе с некоторой сложной логикой.
Вы можете посмотреть следующий пример переворота строки:
В примере 1 шаблон становится очень сложным, и его нелегко читать и понимать.
Далее рассмотрим пример использования вычисляемых свойств:
Пример 2
Попробуйте »
В примере 2 объявляется вычисляемое свойство `reversedMessage`.
Предоставленная функция будет использоваться как геттер для свойства `vm.reversedMessage`.
`vm.reversedMessage` зависит от `vm.message`. Когда `vm.message` изменяется, `vm.reversedMessage` также будет обновляться.
Используйте функцию `computed` для определения вычисляемых свойств:
Пример
<div>
<p>Название товара:{{ productName }}</p>
<p>Цена товара:{{ formattedPrice }}</p>
<button @click="increasePrice">Увеличить цену</button>
</div>
</template>
<script>
import { reactive, computed } from 'vue';
export default {
setup() {
// реактивные данные
const state = reactive({
name: 'Мобильный телефон',
price: 2000
});
// вычисляемое свойство
const productName = computed(() => {
return`Скидка ${state.name}`;
});
const formattedPrice = computed(() => {
return `¥${state.price.toFixed(2)}`;
});
// метод
const increasePrice = () => {
state.price += 100;
};
return {
productName,
formattedPrice,
increasePrice
};
}
};
</script>
Описание
computedФункция:
- В
setupИспользуется в функцииcomputedИспользуйте функцию для определения вычисляемых свойств. - Возвращайте вычисленное значение с помощью стрелочной функции, которая автоматически отслеживает реактивные данные, от которых она зависит (
stateв объектеnameиprice)。
Используйте вычисляемые свойства:
productNameВычисляемые свойства являются производными отstate.name, всякий раз, когдаstate.nameкогда происходят изменения,productNameоно будет автоматически обновляться.formattedPriceВычисляемые свойства являются производными отstate.price, всякий раз, когдаstate.priceкогда происходят изменения,formattedPriceоно будет автоматически обновляться.
реактивные данные:
- Используйте
reactiveфункция создаётstateобъект, превращая его в реактивные данные и позволяя отслеживать изменения в его свойствах.
Метод:
increasePriceМетод используется для увеличенияstate.priceзначения, и каждый раз при нажатии кнопки,state.priceзначение увеличивается на 100, иformattedPriceвычисляемое свойство обновится соответствующим образом.
computed против methods
Мы можем использовать `methods` вместо `computed`. Эффект одинаков для обоих, но `computed` кэшируется на основе своих зависимостей и пересчитывается только при изменении связанных зависимостей. При использовании `methods` функция всегда вызывается и выполняется заново при каждом повторном рендеринге.
Пример 3
Попробуйте »
Можно сказать, что использование `computed` даёт лучшую производительность, но если вы не хотите кэширования, вы можете использовать свойство `methods`.
Сеттер computed
Вычисляемые свойства по умолчанию имеют только геттер, но при необходимости вы также можете предоставить сеттер:
Пример 4
Попробуйте »
Из результата выполнения примера, при выполненииvm.site = 'Example http://www.example.com';когда,сеттербудет вызван,vm.nameиvm.urlтакже будет обновлён соответствующим образом.
