Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Issue
概要
下記PRの動作確認を @komagata さんが行なっていたところ、エラーが出ているとお知らせいただいた。
追記
同時に以下の不具合も見つけたので修正。
原因
一つ目(コンソールエラー)
下記で、回答要素(
_answer.html.slim
の要素群)を取得しています。const answers = document.querySelectorAll('.answer')
回答がなければ、下記の処理は実行されないはずと考えていたが誤りでした。
document.querySelectorAll
は該当する要素が存在しない場合でも、空のNodeListを返します。NodeListは常に真として評価されるため、if(answers)
の条件は常に成立してしまい、意図した挙動になっていませんでした。そのため、lengthを用いることで取得した回答数を確認するようにしました。
2つ目(回答がない場合、回答のローディングスケルトンがずっと表示される。)
一つ目の不具合を修正した後のコードが以下。
この修正により、ローディングスケルトンと回答の切り替えが「回答があった場合」にのみ行われるようになったため、回答がない場合延々とスケルトンが表示されてしまいました。
そのため、この「ローディングスケルトンと回答の切り替え」を回答の有無に関わらず実行できるように、処理を分けました。
3つ目(watchしていない質問に回答した後、watch状態にならない。)
回答フォームの「コメントする」ボタンを押下すると、回答の作成や回答数の更新などが行われます。その処理の中には、質問のwatch状態を更新する処理も含まれています。
watch状態の更新は、以下の updateWatchable 関数で実現しています。
setWatchable
は対象のwatch状態を取得して、更新してくれる処理です。また、回答を作成すると、AnswerWatcher がその回答を自動的にwatch状態にします。
本来の想定フローは以下の通りです:
しかし、回答の作成が非同期で行われていたため、作成処理が完了する前にwatch状態を取得していました。その結果、watch状態が正しく更新されない問題が発生していました。
そこで、回答の作成が完了したことを確認してから、watch状態の更新を行うように変更しました。
変更確認方法
chore/handle-answerjs-warning
をローカルに取り込むScreenshot
JSのコンソールエラー
変更前
変更後
回答がない場合、回答のローディングスケルトンがずっと表示される。
変更後
watchしていない質問に回答した後、watch状態にならない。
変更前
2025-01-27.11.04.45.mov
変更後
2025-01-27.10.46.30.mov