Při tvorbě interaktivních aplikací s Vue.js je reaktivita klíčovým konceptem, který umožňuje, aby data plynula hladce mezi logikou aplikace a uživatelským rozhraním. Podívejme se, jak reaktivita ve Vue.js funguje, se zaměřením na dva hlavní nástroje: ref a reactive.
Základy reaktivity ve Vue.js
Abychom pochopili reaktivní systém Vue, začněme jednoduchým příkladem. Předpokládejme, že chceme spravovat hodnotu count, která se dynamicky aktualizuje.
Příklad bez reaktivity
<!DOCTYPE html>
<html>
<head>
  <title>Vue.js Tutorial</title>
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>
<body>
<div id="app">
  <p>Hodnota: {{ count }}</p>
  {{ changeValue() }}
</div>

<script>
  const { createApp } = Vue;

  const app = createApp({
      setup() {
          let count = 0;

          function changeValue() {
              count = 1;
          }

          return {
              changeValue,
              count,
          };
      },
  });

  app.mount('#app');
</script>
</body>
</html>
Když se pokusíte použít proměnnou count ve své Vue aplikaci, zjistíte, že změny hodnoty count se neodrážejí v uživatelském rozhraní.
Stále nula
Stále nula
Proč? Reaktivní systém Vue si nevšímá obyčejných proměnných. Aby byla hodnota count reaktivní, musíme ji obalit pomocí ref.
Použití ref pro reaktivitu
Funkce ref vytváří reaktivní obal pro hodnotu. Aktualizujme náš příklad:
const { createApp, ref } = Vue;

const app = createApp({
  setup() {
      let count = ref(0);

      function changeValue() {
          setTimeout(() => {
              count.value = 1;
          }, 3000);
      }

      return {
          changeValue,
          count,
      };
  },
});

app.mount('#app');
Po přidání ref vidíte, že se hodnota aktualizuje.
Přidání ref
Přidání ref
Klíčové body o ref
Reaktivní obal: ref obaluje hodnotu, aby byla reaktivní
Přístup k hodnotě: Pro přístup nebo úpravu hodnoty ref použijte vlastnost .value
Dynamické aktualizace: Když se .value změní, uživatelské rozhraní se automaticky aktualizuje, aby odráželo novou hodnotu
Hodnota aktualizována
Hodnota aktualizována
Práce s komplexními objekty pomocí ref
Při práci s komplexnějšími strukturami, jako jsou objekty, můžete stále použít ref:
<!DOCTYPE html>
<html>
<head>
  <title>Vue.js Tutorial</title>
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>
<body>
<div id="app">
  <p>Jméno: {{ pet.name }}</p>
  <p>Věk: {{ pet.age }}</p>
  <p>Oblíbené hračky: {{ pet.favoriteToys.join(', ') }}</p>
  <button @click="changeValue">Aktualizovat hračky</button>
</div>

<script>
  const { createApp, ref } = Vue;

  const app = createApp({
      setup() {
          let pet = ref({
              name: 'Sunny',
              age: 2,
              favoriteToys: ['míček', 'frisbee'],
          });

          function changeValue() {
              pet.value.favoriteToys.push('provaz');
          }

          return {
              changeValue,
              pet,
          };
      },
  });

  app.mount('#app');
</script>
</body>
</html>
Při aktualizaci vnořených vlastností objektu zabaleného v ref stále používáte .value k přístupu k reaktivnímu objektu.
Přidal jsem událost kliknutí, abych předešel nekonečným aktualizacím pole. Nyní, když kliknete na tlačítko, přidá se do pole hraček provaz.
Úvod do reactive
reactive je alternativou k ref, určenou k přímému vytváření reaktivních objektů. Na rozdíl od ref není nutné používat .value pro přístup nebo úpravu vlastností.
Příklad s reactive
<!DOCTYPE html>
<html>
  <head>
  <title>Vue.js Tutorial</title>
  <meta name="viewport" content="width=device-width, initial-scale=1" />
  <script src="https://unpkg.com/vue@3/dist/vue.global.js"></script>
</head>
<body>
  <div id="app">
  <p>Jméno: {{ pet.name }}</p>
  <p>Věk: {{ pet.age }}</p>
  <p>Oblíbené hračky: {{ pet.favoriteToys.join(', ') }}</p>
  <button @click="changeValue">Aktualizovat hračky</button>
</div>

  <InArticle/>

<script>
  const { createApp, reactive } = Vue;

  const app = createApp({
      setup() {
          let pet = reactive({
          name: 'Sunny',
          age: 2,
          favoriteToys: ['míček', 'frisbee'],
      });

      function changeValue() {
          pet.favoriteToys.push('provaz');
      }

      return {
          changeValue,
          pet,
      };
  },
  });

  app.mount('#app');
</script>
</body>
</html>
Přidali jsme reactive z Vue, změnili ref na reactive a odstranili .value při přístupu k poli favoriteToys.
Přidání reactive
Přidání reactive
Po kliknutí na tlačítko Aktualizovat hračky se pole aktualizuje.
Aktualizované pole hraček
Aktualizované pole hraček
Porovnání ref a reactive
Volba mezi ref a reactive
Použijte ref: Pro jednotlivé hodnoty nebo když explicitně potřebujete .value (např. kompatibilita s jinými funkcemi Vue)
Použijte reactive: Pro objekty nebo kolekce, kde chcete jednodušší syntax pro přístup a úpravy vlastností
Video
Nerad čteš, tak mrkni na video 👇
Play