vue.js рендерит компонент

109
15 декабря 2021, 01:20

Возникает проблема с рендерингом.

У меня есть компонент, внутри которого есть ещё один.

A.vue:

<template>
    <v-app
        class="custom-app custom-debug"
        style="background-color: #ffffff;"
    >
        <B
            v-show="!loading"
            :cl="class_"
        />
    </v-app>
</template>
<script>
    import B from "../components/blocks/B";
    export default {
        name: 'A',
        components: { B },
        async created() {
            this.loading = true;
            this.blocks = await this.$store.dispatch('getBlocks');
            this.loading = false;
        },
        data: () => ( {
            class_: null,
            loading: true;
        } ),
    };
</script>

B.vue:

<template>
    <v-btn>
        <v-progress-circular
            :value="100 * cl.solved_blocks / cl.amount_blocks"
        />
    </v-btn>
</template>
<script>
    export default {
        props: ['cl']
        },
    }
</script>

Как Вы можете видеть, я выставляю флажок loading = false, который должен блокировать показ (рендеринг компонента) до того момента, пока не загрузятся данные из vuex. При этом, во vuex выполняются две вложенные асинхронные функции (сейчас они замоканы и там просто стоит таймаут на 500мс). При этом, в консоле браузера, я вижу следующее:


found in
—-> <B> at src/components/blocks/B.vue
       <VApp>
         <Class> at src/views/A.vue
           <VContent>
             <App> at src/App.vue
               <Root>```

Иными словами, рендеринг всё-таки происходит, потому как движок **JS** добрался до `solved_blocks`, который используется внутри `B.vue`
Answer 1

Следует поменять v-show на v-if.

Первый просто скрывает элемент (display: none), а второй действительно не рендерит.

Такая техника нужна, чтобы скрывать элемент, а не уничтожать и рендерить снова. Это, во-первых, быстро, во-вторых, не сбрасывает его состояние уничтожением.

Но вообще, они просто соверженно разные вещи делают. Первый показывает/не показывает. Второй рендерит/не рендерит.

READ ALSO
Построить список из масива

Построить список из масива

Не могу совладать с задачей, прошу Вашей помощи!

206
Как правильно переопределить метод

Как правильно переопределить метод

У меня есть класс Point в котором существует метод showPoints() для вывода информации о точке с координатами и установкой координаты x и yСоздать...

191
Как правильно &#39;перехватить&#39; событие?

Как правильно 'перехватить' событие?

У меня есть div, в котором распологаются img и aНужно вызвать событие при клике по любой области этого элемента: и по пустой, и по тем, где расположены...

129
Независимый блок

Независимый блок

Понимаю вопрос может быть не слишком понятен, но постараюсь изложить суть как можно яснееЕсть блоки в которых расположен контент, они имеют...

94