Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

refを用いたフォーカス処理がうまく動かない。[ step04-3-a.html ] #2

Closed
ktguy0723 opened this issue Jun 19, 2021 · 3 comments
Assignees
Labels
bug Something isn't working

Comments

@ktguy0723
Copy link

初めまして。
いきなり質問なのですが、sample-code/step04/step04-3-a.htmlにて
リストを2個以上登録後、一番下以外のニックネームを変更しようとすると、選択したinputフォームにフォーカスされません。
(どこを選択しても一番下がフォーカスされているようです)

また、上記の実装を見ると、引数で渡しているindexを使用していない点が気になりました。
公式ガイド見てもフォーカスの方法がわからなかったので何かわかれば教えていただきたいです。

// ...
edit: function(user, index) {
    user.editable = true;
    this.$nextTick(() => {
         this.$refs.editNickname.focus();
    });
}
@ktguy0723 ktguy0723 changed the title #question refを用いたフォーカス処理がうまく動かない。 Jun 19, 2021
@ha6-6ru ha6-6ru self-assigned this Jun 20, 2021
@ha6-6ru ha6-6ru added the bug Something isn't working label Jun 20, 2021
@ha6-6ru
Copy link
Owner

ha6-6ru commented Jun 20, 2021

@ktguy0723 はじめまして。フィードバックありがとうございます。

次のbreaking changesの影響で、Vue 3.xでrefsにおける配列の扱いで考慮が必要になりました。
step4においてVue 3.xの変更内容を反映できていませんで、大変ご迷惑をおかけしました。
v-for Array Refs

書籍ではここから先、繰り返し描画される要素を対象にコンポーネント化していきますので、配列として扱う必要が無くなり、このbreaking changesの影響を受けません。

Vue 3.xにおける対応としては、次のようになります。

  1. dataオプションにrefを指定した要素の配列を受け取るプロパティを用意する
  2. :ref に変更して上記プロパティを設定するメソッドを指定する

修正後のコードは基本的に公式ドキュメントと同じ形式になりますが、次の通りです。

<input v-show="user.editable" v-model="user.nickname" @blur="user.editable = false" :ref="setEditNicknameRef">
data: () => ({
  users: [],
  nickname: '',
  email: '',
  nicknameFilter: '',
  editNicknames: [],
}),
methods: {
  setEditNicknameRef: function(el) {
    if (el) {
      this.editNicknames.push(el)
    }
  },
this.$nextTick(() => {
  // DOM更新後に実行
  this.editNicknames[index].focus();
});
beforeUpdate() {
  this.editNicknames = []
},

@ha6-6ru ha6-6ru pinned this issue Jun 20, 2021
@ha6-6ru ha6-6ru changed the title refを用いたフォーカス処理がうまく動かない。 refを用いたフォーカス処理がうまく動かない。[ step04-3-a.html ] Jun 20, 2021
@ktguy0723
Copy link
Author

@ha6-6ru 返信ありがとうございます。
無事動きました!勉強になりました。

また、何かありましたらどうぞよろしくお願いします。

@ha6-6ru
Copy link
Owner

ha6-6ru commented Oct 2, 2022

v-for Array Refs
リンク切れ。以下の通り、削除された模様。
vuejs/v3-migration-guide#10

v3.2.25からまた配列で扱えるようになった。
Refs inside v-for

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bug Something isn't working
Projects
None yet
Development

No branches or pull requests

2 participants