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

回答編集履歴

2

追記

2020/05/27 20:47

投稿

hoshi-takanori
hoshi-takanori

スコア7903

answer CHANGED
@@ -15,6 +15,14 @@
15
15
  + dispatch(googleSignup('fuga'))
16
16
  console.log('Update state: ' + hoge)
17
17
  }
18
+
19
+ return (
20
+ <div>
21
+ <h1>SignUp</h1>
22
+ + <p>Auth name: {hoge}</p>
23
+ <button onClick={handleSubmit}>Google Sign-up</button>
24
+ </div>
25
+ )
18
26
  ```
19
27
 
20
28
  stores/auth.ts
@@ -38,4 +46,27 @@
38
46
  }
39
47
  }
40
48
  });
41
- ```
49
+ ```
50
+
51
+ ---
52
+
53
+ ついでなので、createSlice が何をしているか、自分の推測したことを書いておきます。
54
+
55
+ ```js
56
+ const slice = createSlice({
57
+ name: 'auth',
58
+ initialState,
59
+ reducers: {
60
+ googleSignup(state: State, action: PayloadAction<string>) {
61
+ console.log('Action:', action)
62
+ return { ...state, name: action.payload };
63
+ }
64
+ }
65
+ });
66
+ ```
67
+
68
+ 戻り値 slice は actions と reducer を持ち、
69
+
70
+ - slice.actions は reducers で指定された各 reducer に対応する action creator の集まりで、reducer の action の型を PayloadAction<T> にすると、対応する action creator の引数の型は T で、戻り値 (生成される action) の型は { type: string, payload: T } になる。また、action の type は createSlice に渡した name + '/' + reducer の名前 (上記の例では 'auth/googleSignup') になるっぽい。
71
+
72
+ - slice.reducer は reducers をまとめたもので、state の初期値として initialState を返し、type が createSlice に渡した name + '/' + reducer の名前だったら各 reducer を呼び出すものと思われます。(このため、一つの action type で複数の reducer を反応させることはできない気がします。)

1

誤字の修正

2020/05/27 20:47

投稿

hoshi-takanori
hoshi-takanori

スコア7903

answer CHANGED
@@ -33,7 +33,7 @@
33
33
  - state.name = 'fuga'
34
34
  - console.log('Action:' + state.name)
35
35
  + googleSignup(state: State, action: PayloadAction<string>) {
36
- + console.log('Action:' + action.payload)
36
+ + console.log('Action:', action)
37
37
  + return { ...state, name: action.payload };
38
38
  }
39
39
  }