【Vue.js】Vue.jsの3系バージョンアップでVueRouter.push()の定義が変わっていた
フレームワークのバージョンアップによって、昔書いていた方法が通用しなくなるのは良くあることですね。今回はVue.jsがバージョン3.1.2になったことで、私がVue.js2系で書いていた方法で画面遷移ができなくなったお話です。
バージョン情報
Vue.js
2.6.10から3.1.2へのバージョンアップ
※Typescript使用しています
画面遷移に使用していたメソッドpushでエラーが出るように…
以前作成していたアプリでは画面遷移(Pageコンポーネントの入れ替え)にpush関数を使用しており以下のように記載していました。
# Homeコンポーネントを表示する public moveToHome() { this.$router.push("home"); }
以前はこの記載で問題なく遷移できていたのですが、Vue.js3系になったことで「NavigationDuplicated」が返却されるようになりました。
そして以下にように記載すれば動くようになりました。
public moveToHome() { # 無名関数を2つ引数に追加する this.$router.push("home", () => {}, () => {}); }
以前はルーティング先のパスを文字列で与えればよかったのが、無名関数が必要となりました。
原因
このようになったのはVueRouterのpushメソッドがオーバーロードされたためです。
バージョン2.6.10では以下にような定義となっていた。
export declare class VueRouter { # push以外のメソッドは省略 push(location: RawLocation, onComplete?: Function, onAbort?: ErrorHandler): void; }
バージョン3.1.2では以下にような定義となっていた。
export declare class VueRouter { # push以外のメソッドは省略 push(location: RawLocation): Promise<Route> # 追加された push(location: RawLocation, onComplete?: Function, onAbort?: ErrorHandler): void; }
メソッドが追加されたことで、文字列のみを引数に渡すとPromise<Route>が返却されエラーとなったようです。
エラーの内容がぐぐっても全然出てこず、地味に解消に時間がかかりました…。皆様もお気をつけください。
ディスカッション
コメント一覧
まだ、コメントがありません