ライフサイクルを意識しながらReactコードを書こう
- 9. ついやりがちなミス
下のコンポーネントをブラウザに描画しようとすると失敗します。
1 import React, { useEffect, useState, VFC } from 'react'
2
3 // User型の型定義を省略
4
5 const App: VFC = () => {
6 const [user, setUser] = useState<User>();
7
8 useEffect(() => {
9 fetch('http://localhost:4406/user')
10 .then((res) => res.json())
11 .then((json) => {
12 setUser(json)
13 })
14 }, []);
15
16 return <>
17 <p>{user.id}</p>
18 <p>{user.name}</p>
19 <p>{user.email}</p>
20 </>;
21 }
22
23 export default App;
- 16. 書き直す(その1)
条件分岐で user の値をチェックする
user がFalsyならローディング中とみなしている
` `
` `
1 import React, { useEffect, useState, VFC } from 'react'
2
3 // User型の型定義を省略
4
5 const App: VFC = () => {
6
7 const [user, setUser] = useState<User>();
8
9 // useEffectを省略
10
11 if (!user) return <p>Loading...</p> // これ
12
13 return <>
14 <p>{user.id}</p>
15 <p>{user.name}</p>
16 <p>{user.email}</p>
17 </>;
18 }
19
20 export default App;
- 17. 書き直す(その2)
&& 演算子を賢く使う
` `
1 import React, { useEffect, useState, VFC } from 'react'
2
3 // User型の型定義を省略
4
5 const App: VFC = () => {
6
7 const [user, setUser] = useState<User>();
8
9 // useEffectを省略
10
11 // これ
12 return <>
13 {
14 user &&
15 <>
16 <p>{user.id}</p>
17 <p>{user.name}</p>
18 <p>{user.email}</p>
19 </>
20 }
21 </>;
22 }
23
24 export default App;
25