[react]データFetching&条件付きロード
11046 ワード
🐦 Data Fetching
::Data Fetching with useEffect Hook
import { useState, useEffect } from "react"
function App() {
const [users, setUsers] = useState([])
useEffect(() => {
// Data Fetching -> Side Effect
fetch("http://test.com/users") // (1)
.then(res => res.json()) // (2)
.then(res => setUsers(res)) // (3)
}, [])
return (
<ul>
{users.map((user) => {
<li key={user.id}>{user.name ? "" : ""}</li>
})}
</ul>
)
}
以上のコードは,仮想APIからユーザリストを受信するコードである.データ呼び出しはsideEffectに相当し、userEffectで使用する必要があります.コンポーネントのレンダーパスを順に見て、レンダーとuseEffect hookの関係を見ます.
1.App構成部品がレンダリングされます.初回ログインなのでstate usersの値は空の配列です.したがって、空のulはブラウザに出力されます.<ul></ul>
import { useState, useEffect } from "react"
function App() {
const [users, setUsers] = useState([])
useEffect(() => {
// Data Fetching -> Side Effect
fetch("http://test.com/users") // (1)
.then(res => res.json()) // (2)
.then(res => setUsers(res)) // (3)
}, [])
return (
<ul>
{users.map((user) => {
<li key={user.id}>{user.name ? "" : ""}</li>
})}
</ul>
)
}
<ul></ul>
// 받아온 데이터가 다음과 같은 형태라고 가정하자
[
{ id: "1", name: "React" },
{ id: "2", name: "Side Effect" },
{ id: "3", name: "useEffect" }
]
<ul>
<li key="1">React</li>
<li key="2">Side Effect</li>
<li key="3">useEffect</li>
</ul>
::Error Handling with Conditional Rendering
プロジェクトの実行中に、特定の条件でのみ構成部品をレンダリングする必要があります.
構成部品関数の内部で、特定の値に基づいて選択的にレンダリングを行うことを条件付きレンダリング(conditional rendering)と呼ぶ.
import { useState, useEffect } from "react";
export default function App() {
const [data, setData] = useState({});
useEffect(() => {
fetch("/mock.json")
.then((res) => res.json())
.then((res) => setData(res));
}, []);
return (
<div className="App">
<h1>Hello useEffect!</h1>
<h2>조건부 렌더링 연습 문제</h2>
<ul>
{data.users.map((user) => {
return <li key={user.id}>{user.username}</li>;
})}
</ul>
</div>
);
}
これはコードに書いても問題ありませんが、ブラウザでエラーが発生します.やれやれ頭が痛くて、ディスプレイを全部壊したい.エラーコードをよくチェックすると
1. TypeError
タイプが間違っているということです.これは、numberタイプデータに対してobjectタイプデータのみに対して実行できる操作を実行するなど、発生する可能性のあるエラーです.
cannot read property 'map' of undefined
そのまま読むと、定義されていない値に対してmap関数を実行しようとします.しかしmap関数はデータを配列する方法に属する.定義はありませんmap()のような形式でコードを記述しなければ問題は発生しません.
data.users.map((msg) => {}}
エラー画面では、22番行にカーソルがあり、その文を見ると、(2)に見えるmap関数が表示されます.それはデータです.すなわち、usersまでの値はundefinedである.うっとうしい
:3つの演算子/クイック評価
条件付きレンダリングを実現するには、3つの演算子または&&演算子を使用する必要があります.
区別する
このコンポーネントは、親コンポーネントからisLogin、name、pointという3つのpropsを受信し、isLoginステータスがtrueの場合、ユーザー名と予約ポイント履歴を出力します.
function Greetin(props) {
const { isLogin, name, point } = props;
return {
<div>
{isLogin ? (
<div>
<p>{name}님 환영합니다!</p>
<p>현재 보유중인 포인트는 {point}원 입니다.</p>
</div>
) : null}
</div>
}
}
3つの演算子の場合、falseの場合は値を割り当てる必要があります.だから意味のないNullを入力します.function Greetin(props) {
const { isLogin, name, point } = props;
return {
<div>
{isLogin && (
<div>
<p>{name}님 환영합니다!</p>
<p>현재 보유중인 포인트는 {point}원 입니다.</p>
</div>
)}
</div>
}
}
&&演算子の場合、trueの場合、nullを省略しながらレンダリングのみを行うことを示すため、可読性が向上します.&&演算子を使用する際の注意点
Reference
この問題について([react]データFetching&条件付きロード), 我々は、より多くの情報をここで見つけました https://velog.io/@zzangzzong/React-Data-Fetching-조건부-랜더링テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol