-
Notifications
You must be signed in to change notification settings - Fork 305
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
vuexのstoreの呼び出しから関数定義へコードジャンプできるようにする #2088
Comments
現在のgetter, mutaiton, actionを集約する記法のまま拡張するとすれば、 export const storeOptions = {
ACTION1: {
action({ dispatch }) {
actions.ACTION2(dispatch, { x: 1 });
}
},
ACTION2: {
action(context, payload: { x: number }) {
...
}
}
};
export const actions = extractActions<typeof storeOptions>(); 変更点としては
export const { ACTION1, ACTION2 } = extractActions<typeof storeOptions>(); のようにしても良いかもしれません。 P. S. |
@Segu-g issue作成とまとめありがとうございます!! 状態管理ライブラリについて思うところはいくつかありますが、優先度としては
という順番かなと思いました! 2のために、一斉に全部置き換えなくて良い形だと嬉しいです・・・! Proxy使うのなるほどです、良さそう! 書式の方もなるほどです。
目指したい書式ですが、今がこうなので const store = useStore();
const audioKeys = computed(() => store.state.STATE);
const uiLocked = computed(() => store.getters.GETTER);
await store.dispatch("ACTION", payload); こうできると直感的かも・・・?(実現難度を考えずに提案しています 🙇 ) await store.dispatch.ACTION(payload);
// あるいは
await store.actions.ACTION(payload); できるのかな・・・。
ただ 将来設計のことも考えるとこうしたい、などあれば気軽に言っていただけると!! |
優先度の件を見返した上で再度考えると、redux風の記法にするのはこのissueではなく別にやるべきですね! // at src/component/*.vue
const store = useStore();
store.actions.RUN({ id: 1 });
// at src/store/*.ts
const storeOptions = createPartialStore<StoreTypes>({
...
RUN: {
mutation(state, payload: { id: number }) {
...
},
async action({ state, actions, mutations }, payload: { id: number }) {
mutaitons.RUN(payload),
return await actions.HOGE();
},
},
...
});
actions.ACTIONの方が名前が衝突しない為、誤解を与えることが無くいいと思います👍
すみません!これは私の書き方が悪かったのですが、mutationやgetterも同様にimportしてredux風に使えるようにする想定でした!また、importに関しては
逆に私はimportがそのままstore間の依存関係を示すことになるので、他storeのメソッドが暗黙的にcontextに渡ってくるよりもreduxのように明示的なimportを強制できる記法の方が良いと思っています。特にstoreを分割する際にはどれだけstoreがpureか、結合しているか把握することが重要であるので、そういった意味で依存一覧を確認できる手法はあった方が良いかと! |
早速PRありがとうございます!! ちょっとお手数おかけしてしまうのですが、時間あれば段取りチェックリストを作っておくと後で困らないかもと思いました! もちろん変えていただいても問題ないです 🙏 関数をそれぞれimportする形式、なるほどです! |
@Segu-g 調子はどうでしょうか 👀 結構変更量が多くなってしまってコンフリクトまみれになりそうなので、直近で動かないやつから順に置き換えていくのが良いかも・・・? |
@Hiroshiba 連絡が途切れてしまい申し訳ございません🙇♂️ 状態といたしましては、とりあえず置き換えていくだけで、storeとuiのdispatch及びcommitを置換するだけなので困るようなところもございません。 |
おお、ありがとうございます!! |
@Segu-g 怒涛の変更ありがとうございました!!!!! これでこのissueとしては完成でしょうか? 長きに渡る戦いが・・・!!!!! |
内容
現在のvoicevoxの状態管理は Vuex に独自のカスタムヘルパーを加えることで型サポートを受けています。
しかし現在のVuexの型を拡張したものでは、action, mutationの呼び出しが
dispatch("ACTION1")
,commit("MUTATION1")
のような文字列での参照になってしまう為コードジャンプができません。これを改善し
xxx.ACTION1()
のようにプロパティとして呼び出せることにすることでコードジャンプができるようになります。Pros 良くなる点
コードジャンプができるようになり、開発体験が向上する。
Cons 悪くなる点
現在のあくまでVuexのサポートとしての型サポートと違い、
呼び出し側での構文が変わるので初心者が混乱する。
実現方法
文字列の関数渡しとプロパティアクセスの互換は
Proxy
を用いることで実現できる。これを用いてvuexのkeyをプロパティアクセスから呼び出せるようにし、入力支援が効くようにする。
VOICEVOXのバージョン
0.?.0
OSの種類/ディストリ/バージョン
その他
The text was updated successfully, but these errors were encountered: