Heim > Web-Frontend > View.js > So lösen Sie das Problem, dass sich die Seite nach Verwendung der reaktiven Zuweisung in vue3 nicht ändert

So lösen Sie das Problem, dass sich die Seite nach Verwendung der reaktiven Zuweisung in vue3 nicht ändert

WBOY
Freigeben: 2023-05-15 14:22:21
nach vorne
2521 Leute haben es durchsucht

    Grund für die Szene

    Wir müssen die Daten des Servers verwenden, um die Seite in vue3 zu rendern. Ich verwende die von Reactive generierten responsiven Datenattribute, aber die angeforderten Daten werden danach nicht gerendert und auf der Seite angezeigt Montage überlegen.

    Technologie: vue3element-ui-plus

    1. Beispiel

    home.vue

    <template>
      <div class="common-layout">
        <el-menu @select="changeMenu" :collapse="isCollapse" active-text-color="#409eff" background-color="#333744"
          class="el-menu-vertical-demo" default-active="2" text-color="#fff" :unique-opened="true">
          <el-sub-menu :index="item.path" v-for="(item) in parmar.menus" :key="item.id">
            <template #title>
              <el-icon>
                <List />
              </el-icon>
              <span>{{ item.authName }}</span>
            </template>
            <el-menu-item :index="item2.path" v-for="(item2) in item.children" :key="item2.id">
              <el-icon>
                <Menu />
              </el-icon>
              {{ item2.authName }}
            </el-menu-item>
          </el-sub-menu>
        </el-menu>
      </div>
    </template>
    <script setup>
    // 引入模块
    import { reactive, onMounted } from &#39;vue&#39;
    import { useRouter } from &#39;vue-router&#39;
    import http from &#39;@/utils/request&#39;
    const router = useRouter();
    let menusList = reactive([
    ]);
    onMounted(() => {
      getData()
    })
    const getData = async () => {
      let { data } = await http.get(&#39;/menus&#39;);
      // 这里直接赋值,会导致menusList失去响应式了
      menusList = data.data;
      console.log(menusList);
    }
    const changeMenu = (key) => {
      router.push(&#39;/home/&#39; + key)
    }
    </script>
    <style lang="less" scoped>
    .common-layout {
      height: 100vh;
      box-sizing: border-box;
      position: relative;
      overflow: hidden;
      /deep/.el-menu--vertical {
        margin: 0;
        border-right: none !important;
        overflow-x: hidden;
        height: calc(100vh - 100px);
        user-select: none;
      }
      .el-menu-vertical-demo:not(.el-menu--collapse) {
        width: 200px;
        min-height: 400px;
      }
    }
    </style>
    Nach dem Login kopieren

    So lösen Sie das Problem, dass sich die Seite nach Verwendung der reaktiven Zuweisung in vue3 nicht ändert

    Durch direkte Zuweisung können wir erkennen, dass die Daten zu gewöhnlichen Daten werden und nicht reagieren. 2. Lösung

    2. Verwenden Sie Objekte, um die zu ändernden Daten reaktiv zu verpacken.

    Der Code lautet wie folgt:

    <script setup>
    // 引入模块
    import { ref, reactive, onMounted } from &#39;vue&#39;
    import http from &#39;@/utils/request&#39;
    let menusList = ref([
    ]);
    onMounted(() => {
      getData()
    })
    const getData = async () => {
      let { data } = await http.get(&#39;/menus&#39;);
      // 这里直接赋值value,在页面上直接使用menusList即可!
      menusList.value = data.data;
    }
    </script>
    Nach dem Login kopieren

    So lösen Sie das Problem, dass sich die Seite nach Verwendung der reaktiven Zuweisung in vue3 nicht ändertMit dieser Methode reagieren die Daten auch.

    3. Die for of-Schleife pusht auf die reaktiven Daten, ohne die Datenstruktur zu zerstören

    Der Code lautet wie folgt:

    <script setup>
    // 引入模块
    import { reactive, onMounted } from &#39;vue&#39;
    import http from &#39;@/utils/request&#39;
    let parmar = reactive({
      menus: [
      ]
    });
    onMounted(() => {
      getData()
    })
    const getData = async () => {
      let { data } = await http.get(&#39;/menus&#39;);
      // 这里直接赋值对象里面的数据,就不会造成把响应式替换掉的情况了,直接在页面上通过parmar.menus使用数据!
      parmar.menus = data.data;
      console.log( parmar);
    }
    </script>
    Nach dem Login kopieren

    Das obige ist der detaillierte Inhalt vonSo lösen Sie das Problem, dass sich die Seite nach Verwendung der reaktiven Zuweisung in vue3 nicht ändert. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

    Verwandte Etiketten:
    Quelle:yisu.com
    Erklärung dieser Website
    Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
    Beliebte Tutorials
    Mehr>
    Neueste Downloads
    Mehr>
    Web-Effekte
    Quellcode der Website
    Website-Materialien
    Frontend-Vorlage