ホームページ >ウェブフロントエンド >Vue.js >Vue3 ページ部分更新コンポーネントの更新問題を解決する方法

Vue3 ページ部分更新コンポーネントの更新問題を解決する方法

PHPz
PHPz転載
2023-05-16 22:37:192447ブラウズ

操作開始

vue3のライフサイクルとvue2のライフサイクルは全く異なります

vue2とvue3の違い

この2つを簡単に紹介します違い

Vue2 と Vue3 の最大の違い: Vue3 合成 API (Composition API) と比較して、Vue2 はオプション API (Options API) を使用します

古いオプション APIデータ、計算された属性、メソッドなど、さまざまな属性がコード内で分離されます。新しい合成 API では、メソッド (関数) を使用して分離することができます。属性を使用してグループ化する古い API と比較して、 この方法では、コードがよりシンプルでクリーンになります。

vue2

export default {
    props: {
        title: String,
    },
    data() {
        return {
            username: "",
            password: "",
        };
    },
    methods: {
        login() {
            //登录axios请求处理
        },
    },
    components: {
        buttonComponent: btnComponent,
    },
    computed: {
        fullName() {
            return this.firstName + " " + this.lastName;
        },
    },
};

vue3

export default {
    props: {
        title: String,
    },
    setup() {
        const state = reactive({
            //数据
            username: "",
            password: "",
            lowerCaseUsername: computed(() => state.username.toLowerCase()), //计算属性
        });
        //方法
        const login = () => {
            //登录axios请求处理
        };
        return {
            login,
            state,
        };
    },
};

Vue2 と Vue3 のフック関数のライフサイクルの比較

Vue2--------------vue3
beforeCreate  -> setup()
created       -> setup()
beforeMount   -> onBeforeMount
mounted       -> onMounted
beforeUpdate  -> onBeforeUpdate
updated       -> onUpdated
beforeDestroy -> onBeforeUnmount
destroyed     -> onUnmounted
activated     -> onActivated
deactivated   -> onDeactivated

setup(): コンポーネントの作成を開始する前に、beforeCreate作成前に実行されます。作成されるのはデータとメソッド
onBeforeMount(): コンポーネントがノードにマウントされる前に実行される関数です。
onMounted(): コンポーネントがマウントされた後に実行される関数。
onBeforeUpdate(): コンポーネントが更新される前に実行される関数。
onUpdated(): コンポーネントの更新が完了した後に実行される関数。
onBeforeUnmount(): コンポーネントがアンマウントされる前に実行される関数。
onUnmounted(): コンポーネントのアンマウント完了後に実行される関数
コンポーネントが含まれる場合、以下の 2 つのフック関数が追加されます。
onActivated(): 含まれるコンポーネントには、さらに 2 つのライフサイクル フック関数が含まれます。アクティブ化されると実行されます。
onDeactivated(): たとえば、コンポーネント A からコンポーネント B に切り替える場合、コンポーネント A が消えたときに実行されます。
本題に入り、今日の問題を解決します

コード

まず、app.vueを変更する必要があります

コード:

<template>
  <div id="app">
    <nav-View v-show="login" />
    <router-view v-if="isRouterAlive" /> <!-- 进行v-if判断 -->
    <foot-View v-show="login" />
  </div>
</template>

<script>
import navView from "@/components/navView.vue";
import footView from "@/components/footer.vue";
import { onMounted, ref, watch ,nextTick,provide,} from "vue";//要引入方法
import { useRouter } from "vue-router";

export default {
  name: "app",
  components: {
    navView,
    footView,
  },
  created() {
    console.log("123", this.$route.path);
  },
  setup() {
    // 局部组件刷新
    const isRouterAlive = ref(true);
    const reload = () => {
      isRouterAlive.value = false;
      nextTick(() => {
        isRouterAlive.value = true;
      });
    };
    provide("reload", reload);
    return {
      isRouterAlive,
    };
  },
  watch: {
    
  },
};
</script>

<style>
* {
  margin: 0px;
}
#app {
  font-family: "Avenir", Helvetica, Arial, sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
  text-align: center;
  color: #2c3e50;
}
</style>

次のステップは、サブコンポーネント (ページネーション呼び出し)

コード:

<template>
  <div>
    <!-- input框输入值,点击按钮,看值会不会清空 -->
    <input type="text"> 
  </div>
  <button @click="refresh">页面刷新</button>
</template>
<script>
import { inject } from "vue";
export default{
  setup() {
    const refresh = inject("reload");
	//在方法体中的调用方法
    // refresh();
    return {
      refresh,
    };
  },
};
</script>
です。

以上がVue3 ページ部分更新コンポーネントの更新問題を解決する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事はyisu.comで複製されています。侵害がある場合は、admin@php.cn までご連絡ください。