質問編集履歴

8

タイトル変更

2023/01/19 09:24

投稿

maroniel
maroniel

スコア15

test CHANGED
@@ -1 +1 @@
1
- vueコンポーネントの外でpiniaを使うと、その内容がvueコンポーネントには影響されない
1
+ vueコンポーネントの外でpiniaのaction実行しても、その内容がvueコンポーネントの中には影響されない
test CHANGED
File without changes

7

タイトル変更

2023/01/19 09:23

投稿

maroniel
maroniel

スコア15

test CHANGED
@@ -1 +1 @@
1
- vueコンポーネントの外でpiniaを使うとすると、その内容がvueコンポーネントには影響されない
1
+ vueコンポーネントの外でpiniaを使うと、その内容がvueコンポーネントには影響されない
test CHANGED
File without changes

6

タイトル変更

2023/01/19 09:22

投稿

maroniel
maroniel

スコア15

test CHANGED
@@ -1 +1 @@
1
- vue3でpiniaを使っているのですが、vueコンポーネントの外でpiniaを使おうとすると、その内容がコンポーネントには影響されないのですが、どうすれば影響されるようになるでしょうか?
1
+ vueコンポーネントの外でpiniaを使おうとすると、その内容がvueコンポーネントには影響されない
test CHANGED
File without changes

5

補足追加

2023/01/19 02:09

投稿

maroniel
maroniel

スコア15

test CHANGED
File without changes
test CHANGED
@@ -68,6 +68,15 @@
68
68
  main.tsのpluginをuseしたときにpiniaのインスタンスと同じものを使えば良さそう。
69
69
  ただそれだとHttpClientをvueコンポーネントの外で使うことができない。
70
70
 
71
+ 例)vue コンポーネント内でならthisで呼べるようになっている。
72
+ ```
73
+ const res = await this.$httpClient.put(..);
74
+ ```
75
+ しかしstoreなどvueコンポーネント外で使う場合はimportする場合があるがそうするとstoreが使えないということになる。
76
+ ```
77
+ import { httpClient } from "@/admin/network/httpClient";
78
+ ```
79
+
71
80
  なにか良い解決方法などあれば教えていただきたいです。
72
81
 
73
82
 

4

試したことを追加

2023/01/18 09:57

投稿

maroniel
maroniel

スコア15

test CHANGED
File without changes
test CHANGED
@@ -17,6 +17,8 @@
17
17
  app.use(pinia)
18
18
  This will fail in production.
19
19
  ```
20
+ ### 試したこと
21
+ #### try1) 新しくcreatePiniaする
20
22
 
21
23
  そこで
22
24
  https://qiita.com/Naoto_Ito/items/ede2b0a09f474df5e704
@@ -35,9 +37,36 @@
35
37
  ```
36
38
  追加しました。
37
39
 
38
- するとエラーは出なくなったのですが、そこで呼び出したactionの内容をコンポーネントで呼び出ししても、影響がありませんでした。
40
+ すると方法1の方ではエラーは出なくなったのですが、そこで呼び出したactionの内容をコンポーネントで呼び出ししても、影響がありませんでした。
41
+ 方法2では解消しませんでした。
39
42
 
43
+ #### try2) vueのpluginを読み込むときに使っているpiniaのインスタンスをstoreの引数に渡してみた。
44
+
45
+ ```
46
+ const app = createApp(App)
47
+ import { createPinia } from 'pinia'
48
+ const pinia = createPinia()
49
+ app.use(pinia)
50
+ app.mount('#app')
51
+
52
+ import { useAlertStore } from './store/alert';
53
+ const alertStore = useAlertStore(pinia);
54
+
55
+ class HttpClient {
56
+     alertStore.openAlert({
57
+ text: 'TEST',
58
+ type: "error"
59
+ })
60
+
61
+ ....省略
62
+
63
+ const httpClient = new HttpClient();
64
+ app.config.globalProperties.$httpClient = httpClient
65
+ ```
66
+ これでうまく動作しました。
67
+
40
- 多分ここで新しくcreatePiniaしてるので、main.tsのpluginをuseしたときにcreatePiniaしたものと違ことが原因な気がしています(あくまで予想)
68
+ main.tsのpluginをuseしたときにpiniaのインスタンスと同じものを使えば良さそう。
69
+ ただそれだとHttpClientをvueコンポーネントの外で使うことができない。
41
70
 
42
71
  なにか良い解決方法などあれば教えていただきたいです。
43
72
 

3

抜け

2023/01/18 09:27

投稿

maroniel
maroniel

スコア15

test CHANGED
@@ -1 +1 @@
1
- vue3でpiniaを使っているのですが、vueコンポーネント外でpiniaを使おうとすると、その内容がコンポーネントには影響されないのですが、どうすれば影響されるようになるでしょうか?
1
+ vue3でpiniaを使っているのですが、vueコンポーネント外でpiniaを使おうとすると、その内容がコンポーネントには影響されないのですが、どうすれば影響されるようになるでしょうか?
test CHANGED
File without changes

2

補足

2023/01/18 09:24

投稿

maroniel
maroniel

スコア15

test CHANGED
File without changes
test CHANGED
@@ -58,3 +58,6 @@
58
58
  * https://jasonwatmore.com/post/2022/07/25/vue-3-pinia-user-registration-and-login-example-tutorial
59
59
  * https://github.com/cornflourblue/vue-3-pinia-registration-login-example
60
60
 
61
+ ここの参考ではhelperなどのコンポーネント外でstoreを呼び出して使っているようなのですが、なぜエラーが起きずに使えているのか不明
62
+ https://github.com/cornflourblue/vue-3-pinia-registration-login-example/blob/master/src/helpers/fetch-wrapper.js
63
+

1

追記

2023/01/18 09:21

投稿

maroniel
maroniel

スコア15

test CHANGED
File without changes
test CHANGED
@@ -4,6 +4,13 @@
4
4
  router/index.tsというルーティングを管理するファイルと
5
5
  network/httpClient.tsというaxiosを管理するファイルが有り、このあたりでエラーが出た場合アラートを出したいり、ログインの管理をしています。
6
6
  ただこれらのコンポーネント以外のファイルでstoreを呼び出すと以下のエラーが出ます。
7
+
8
+ storeの呼び出し
9
+ ```
10
+ import { useAlertStore } from '../store/alert';
11
+ const alertStore = useAlertStore();
12
+ ```
13
+ ブラウザのコンソールエラー
7
14
  ```
8
15
  main.js:21 Uncaught Error: [🍍]: getActivePinia was called with no active Pinia. Did you forget to install pinia?
9
16
  const pinia = createPinia()