回答編集履歴

1

redux-thunkの例を追加

2019/03/04 10:41

投稿

noka_blank
noka_blank

スコア252

test CHANGED
@@ -96,6 +96,96 @@
96
96
 
97
97
 
98
98
 
99
+ 追記: API呼び出しをどこに書くのか
100
+
101
+
102
+
103
+ redux-thunkを使ったパターンを紹介します。
104
+
105
+
106
+
107
+ ```js
108
+
109
+ export default function reducer(state, action) {
110
+
111
+ switch (action.type) {
112
+
113
+ case REQUEST_LOGIN:
114
+
115
+ return Object.assign({}, state, {
116
+
117
+ isFetching: true,
118
+
119
+ });
120
+
121
+ case RESPONSE_LOGIN:
122
+
123
+ return Object.assign({}, state, {
124
+
125
+ isFetching: false,
126
+
127
+ isLogin: action.isLogin,
128
+
129
+ });
130
+
131
+ default:
132
+
133
+ return state;
134
+
135
+ }
136
+
137
+ }
138
+
139
+
140
+
141
+ export function requestLogin() {
142
+
143
+ return {
144
+
145
+ type: REQUEST_LOGIN,
146
+
147
+ };
148
+
149
+ }
150
+
151
+
152
+
153
+ export function responseLogin(json) {
154
+
155
+ return {
156
+
157
+ type: RESPONSE_LOGIN,
158
+
159
+ isLogin: json.is_login,
160
+
161
+ };
162
+
163
+ }
164
+
165
+ // この関数がコンポーネントから呼ばれる
166
+
167
+ // fetchの結果、非同期でActionがコールされ、Storeが書き換わります。
168
+
169
+ export function isLogin() {
170
+
171
+ return (dispatch) => {
172
+
173
+ dispatch(requestLogin());
174
+
175
+ return fetch('/api/auth', { credentials: 'include', cache: 'no-store' })
176
+
177
+ .then(response => response.json())
178
+
179
+ .then(json => dispatch(responseLogin(json)));
180
+
181
+ };
182
+
183
+ }
184
+
185
+ ```
186
+
187
+
188
+
99
189
  reactは自由度が高いライブラリですので、色々なサイトを見てもそれぞれ違った方法で構築されている事が多いので、戸惑うことがあると思いますが、それがReactの良さでもあるのかもしれませんね。
100
190
 
101
191
  回答になりましたでしょうか?