teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

3

追記

2018/11/17 16:59

投稿

NozomuIkuta
NozomuIkuta

スコア1260

answer CHANGED
@@ -57,4 +57,24 @@
57
57
  }
58
58
  })
59
59
  }
60
- ```
60
+ ```
61
+
62
+ ## 追記(2018/11/18)
63
+
64
+ 以下の「...mapState({ ... })」の部分は、スプレッド構文です。
65
+ コード省略に「...」と書いていたので紛らわしかったかもしれません。すみません。
66
+
67
+ ```
68
+ // 省略
69
+ computed: {
70
+ ...mapState(/* 省略 */)
71
+ }
72
+ // 省略
73
+ ```
74
+
75
+ `...mapState()`は`mapState()`の結果(オブジェクト)を`computed`(オブジェクト)に展開します。
76
+
77
+ 詳細は以下の参考資料を見てください。
78
+ [MDN公式](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Operators/Spread_syntax)
79
+ [Qiitaの記事1](https://qiita.com/Nossa/items/e6f503cbb95c8e6967f8)
80
+ [Qiitaの記事2](https://qiita.com/akisx/items/682a4283c13fe336c547)

2

脱字修正

2018/11/17 16:59

投稿

NozomuIkuta
NozomuIkuta

スコア1260

answer CHANGED
@@ -56,4 +56,5 @@
56
56
  setUserId(...) { ... }
57
57
  }
58
58
  })
59
+ }
59
60
  ```

1

内容修正・追記

2018/11/16 15:40

投稿

NozomuIkuta
NozomuIkuta

スコア1260

answer CHANGED
@@ -5,7 +5,7 @@
5
5
  `_user_id`が必須でない場合、`/pages/mypage/_user_id.vue`となり、
6
6
  `_user_id`が必須の場合、`/pages/mypage/_user_id/index.vue`となります。
7
7
 
8
- あとは、`ドメイン/pages/mypage/1`や`ドメイン/pages/mypage/2`など実際のIDをつけてアクセスするだけです。
8
+ あとは、`ドメイン/mypage/1`や`ドメイン/mypage/2`など実際のIDをつけてアクセスするだけです。
9
9
 
10
10
  他のコンポーネントからリンクを張りたければ、
11
11
  `<nuxt-link>`の`to`属性に、`user_id`をバインディングすれば、
@@ -14,4 +14,46 @@
14
14
 
15
15
  ## 補足
16
16
 
17
- ご自身でURLを記載されていますが、ドキュメントで言えば該当箇所は[ここ](https://ja.nuxtjs.org/guide/routing/#%E5%8B%95%E7%9A%84%E3%81%AA%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0)です。
17
+ ご自身でURLを記載されていますが、ドキュメントで言えば該当箇所は[ここ](https://ja.nuxtjs.org/guide/routing/#%E5%8B%95%E7%9A%84%E3%81%AA%E3%83%AB%E3%83%BC%E3%83%86%E3%82%A3%E3%83%B3%E3%82%B0)です。
18
+
19
+ ## 追記(2018/11/17)
20
+ `<nuxt-link>`に動的にリンク先を設定する場合は、以下のような方法でできます。
21
+
22
+ ```Vue
23
+ <template>
24
+ <nuxt-link :to="mypageUrl">マイページ</nuxt-link>
25
+ </template>
26
+
27
+ <script>
28
+ import { mapState } from 'vuex'
29
+
30
+ export default {
31
+ name: 'sampleComponent',
32
+ computed: {
33
+ ...mapState({
34
+ mypageUrl: (state) => `/mypage/${state.userId}`
35
+ })
36
+ }
37
+ }
38
+ </script>
39
+ ```
40
+
41
+ `/store/index.js`は以下のようにします。
42
+ (Firebaseの認証については省略しています。あくまで動的リンクの設定に注目しています)
43
+
44
+ ```JavaScript
45
+ import Vuex from 'vuex'
46
+
47
+ const createStore = () => {
48
+ return new Vuex.Store({
49
+ state: {
50
+ userId: '' // 初期値
51
+ },
52
+ mutations: {
53
+ setUserId(...) { ... }
54
+ },
55
+ actions: {
56
+ setUserId(...) { ... }
57
+ }
58
+ })
59
+ ```