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

回答編集履歴

1

テキスト追加

2020/06/03 11:48

投稿

jun68ykt
jun68ykt

スコア9058

answer CHANGED
@@ -14,4 +14,47 @@
14
14
  fetch('https://script.google.com/macros/s/*********/exec')
15
15
  .then(tasks => tasks.json())
16
16
  .then(json => json);
17
+ ```
18
+
19
+ ### 追記
20
+
21
+ 以下のように修正してみると、いかがでしょうか?
22
+
23
+ #### 修正前
24
+ ```javascript
25
+ const getTasksApi = () => {
26
+ //APIを読み込む処理
27
+ //何種類か試しました。試したものは下に書いてあります。
28
+ }
29
+
30
+ class App extends React.component {
31
+ constructor() {
32
+   this.state = {
33
+ tasks: getTaskApi();
34
+ }
35
+ }
36
+ ```
37
+
38
+
39
+ `App` の `constructor()` では、 `this.state.tasks` を空の配列で初期化しておいて、`componentDidMount()` でAPIを呼び、その結果で `this.setState` で `tasks` を更新します。このとき、レスポンスが返ってくるために待つために、 async と await を使います。
40
+
41
+ #### 修正後
42
+ ```javascript
43
+ const getTasksApi = async () =>
44
+ fetch('https://script.google.com/macros/s/*********/exec')
45
+ .then(tasks => tasks.json());
46
+
47
+ class App extends React.component {
48
+ constructor() {
49
+   this.state = {
50
+ tasks: []
51
+ }
52
+ }
53
+
54
+ componentDidMount() {
55
+ const tasks = await getTasksApi();
56
+ this.setState({ tasks });
57
+ }
58
+
59
+ ・・・
17
60
  ```