Open knokmki612 opened 1 week ago
「状態管理を行うにはuseStateじゃなくてはならない」というこだわりはないらしいので、ニーズに合わせて選定することも大切とのこと。 https://nuxt.com/docs/getting-started/state-management#using-third-party-libraries
useState関数は、一意のキーを使用してすべてのコンポーネント間で共有される状態管理のコンポーザブル関数であり、コンポーネント同士でpropsやemitによるデータのバケツリレーをせずともグローバルに直接データを扱える。
コンポーザブルとは状態を持つロジックをカプセル化して再利用することができることを指し、 再利用はどこのコンポーネント(Vueファイル)からでもアクセスが可能になる。
Composition APIが提供されるようになって、リアクティブな値をコンポーネントから切り離して管理するComposable Function が使えるようになった。これはjsもしくはtsファイルとしてcomposablesディレクトリ配下に格納することが一般的である。 利点は、どこからでも簡単にアクセスがゆえ自由にデータの変更ができるようになってしまうため、readonlyメソッドでデータ自体は保護したり、ミューテーションできる関数を提供するなどの機能を提供でき、それをコンポーネントから利用することができることで、安全かつ効率的に管理された状態を扱えることにある。
という説明に触れたうえで、counterのサンプルコードでも見せたほうがよさそう。 ただ、Nuxt環境でuseStateを使うので、 Vue Playgroundではないほうでデモを見せるなどで理解を深めてもらいたい。
最低限と思えるコードを書いてみた。 https://stackblitz.com/edit/nuxt-starter-rnflks?file=composables%2Fcounter.js
そもそも nuxtのハンズオンの流れで composables について触れているので、ここで説明を増やすで良い気がする https://github.com/tuqulore/vue-3-practices/blob/4db6309dab91ec6eee358f365adca35a54410fae/docs/slides.md#L1819-L1820
コンポネント外のグローバルな領域でrefを使うと、グローバルな状態として扱えなく、個別のデータとしてしか扱えないことを確認した。
const count = ref(3);
の場合
const count = useState("counter", () => 3);
の場合
付箋アプリで使っているが、Nuxtの説明としてあると親切