-
Notifications
You must be signed in to change notification settings - Fork 40
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
share-target でデフォルトテキストが表示されないバグの修正 #4163
share-target でデフォルトテキストが表示されないバグの修正 #4163
Conversation
Preview (prod) → https://4163-prod.traq-preview.trapti.tech/ |
Codecov ReportAll modified and coverable lines are covered by tests ✅
Additional details and impacted files@@ Coverage Diff @@
## master #4163 +/- ##
=======================================
Coverage 86.35% 86.35%
=======================================
Files 66 66
Lines 4719 4719
Branches 564 564
=======================================
Hits 4075 4075
Misses 638 638
Partials 6 6 ☔ View full report in Codecov by Sentry. |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
PRありがとうございます、こんなページあったの始めて知りました
ShareTargetForm.vue
の68~76行目の
// FIXME: 親子関係なのにprovide-injectを乱用してるの微妙
const { state } = useMessageInputState('share-target')
watch(
() => props.defaultText,
newVal => {
state.text = newVal
},
{ immediate: true }
)
でおそらくtextareaの値を初期化する処理は入っていそうなので、defaultTextをpropsとして渡す必要はなさそうです(useMessageInputState
でshare-target
というkeyでstoreを通してコンポーネント間でstate
が共有されていそうです)
なんでdefaultText
がtextareaに反映されていないのか色々見てみたのですが、なんでか分からないけどtextarea
にv-if="state.text !== ''"
みたいなのをつければ直りました(多分上に挙げたコードでnewVal
にしたのがtextareaの方には上手くリアクティブに反映されてなかったんだと思います)
ただ、v-if
を使う方針だとtext
のquery paramが空文字orない場合だとtextareaが一生表示されなくなってしまうので、以下のどれかになりそうです
- 「
text
のquery paramが空文字orない場合」がありえないと仮定していいならv-if
を使う方針にする useMessageInputState
で変更がリアクティブに反映されるように修正するuseMessageInputState
の第二引数にdefaultText
を渡すとかでもいいかも?他のところでこのcomposablesがどう使われているのか把握してないのでもしかしたらよくないかもです
useMessageInputState
を使わずに、props・emitだけで処理するようにする- 今の方針のままにする
- その場合、上で挙げた
watch
のコードは消してもよさそうかもです
- その場合、上で挙げた
なお、usePostMessageは通常のチャンネルUI( 実装方針はメンテナでも vue 詳しいわけでも無いので僕からはなんとも... |
色々試してみてたんですが、 - v-model="state.text"
+ :value="state.text"
+ @input="e => { state.text = (e.target as HTMLTextAreaElement).value }" だけで治りそうでした (v-model と変わらないはずなのに :doushite:) watch に |
↑で直りそうならそれでよさそうです |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
なんでこれで直るのかは結局分かってないけど、メインの機能でもないしいいと思います
ありがとうございます
share-target API が今まではデフォルトテキストが空文字になっていたので修正。
元々の状態でもテキストエリアに表示されないだけで編集せずに投稿すれば元々の文字列が投稿できていたが、一度でも編集するとテキストエリアの文字が投稿されていた。
Vue何も分からずに適当に編集しているので作法とか間違ってるかも
share-target APIの使用例: https://q.trap.jp/share-target?title=foo&text=aaaaaaaa&url=www.google.co.jp