Heim  >  Artikel  >  Web-Frontend  >  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
WBOYnach vorne
2023-05-15 14:22:212464Durchsuche

    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>

    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>

    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>

    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!

    Stellungnahme:
    Dieser Artikel ist reproduziert unter:yisu.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen