第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

從正在使用的 API 中獲取數(shù)據(jù)直接在 react 中獲取影響或事件處理程序中的數(shù)據(jù)

從正在使用的 API 中獲取數(shù)據(jù)直接在 react 中獲取影響或事件處理程序中的數(shù)據(jù)

ibeautiful 2022-09-23 21:26:50
在反應(yīng)鉤子中應(yīng)該如何執(zhí)行抓取?在這兩個代碼片段中,哪一個被稱為最佳實(shí)踐或執(zhí)行 fetch 的最佳反應(yīng)模式?此示例用于執(zhí)行操作。useEffectfetchimport React, { useState, useEffect } from "react";export default function App() {  const [query, setQuery] = useState("");  const [loading, setLoading] = useState(false);  const [data, setData] = useState([]);  useEffect(() => {    if (!loading) return;    const fetchData = async () => {      const response = await fetch(        `https://api.github.com/search/repositories?q=${query}`      );      const data = await response.json();      setData(data.items);      setLoading(false);    };    fetchData();  }, [loading, query]);  const onSubmit = e => {    e.preventDefault();    setLoading(true);  };  return (    <div className="App">      <h1>Search Github Repo.</h1>      <h3>Implementation One</h3>      <form onSubmit={onSubmit}>        <input          type="text"          value={query}          onChange={e => setQuery(e.target.value)}        />        <button type="submit">Search</button>      </form>      {loading && <div>Loading...</div>}      {!loading &&        data.map(repo => (          <div key={repo.id}>            <h4>{repo.name}</h4>            <p>{repo.description}</p>          </div>        ))}    </div>  );}此示例使用事件處理程序來執(zhí)行操作。onClickfetchimport React, { useState } from "react";export default function App() {  const [query, setQuery] = useState("");  const [loading, setLoading] = useState(false);  const [data, setData] = useState([]);  const onSubmit = e => {    e.preventDefault();    setLoading(true);    const fetchData = async () => {      const response = await fetch(        `https://api.github.com/search/repositories?q=${query}`      );      const data = await response.json();      setData(data.items);      setLoading(false);    };    fetchData();  };}
查看完整描述

2 回答

?
智慧大石

TA貢獻(xiàn)1946條經(jīng)驗(yàn) 獲得超3個贊

這取決于您的用例,您應(yīng)該采取哪種方法

在以下情況下獲取數(shù)據(jù)很有用useEffect

  • 在某些生命周期(如初始渲染)中獲取數(shù)據(jù)

  • 在某些 prop 更改時獲取數(shù)據(jù)

  • 每隔一段時間獲取數(shù)據(jù),但設(shè)置訂閱或setInterval

在下面的方案中,在處理程序中獲取數(shù)據(jù)很有用

  • 根據(jù)用戶交互(如搜索按鈕單擊)、搜索輸入更改

由于您的案例是基于使用交互的,因此在處理程序而不是鉤子中實(shí)際調(diào)用API會更好,更受控制useEffect


查看完整回答
反對 回復(fù) 2022-09-23
?
GCT1015

TA貢獻(xiàn)1827條經(jīng)驗(yàn) 獲得超4個贊

我會說你應(yīng)該使用鉤子實(shí)現(xiàn)。在 React 文檔中,建議使用它來執(zhí)行副作用:


數(shù)據(jù)獲取、設(shè)置訂閱和手動更改 React 組件中的 DOM 都是副作用的示例。無論您是否習(xí)慣于將這些操作稱為“副作用”(或只是“效果”),您之前都可能在組件中執(zhí)行過它們。(鏈接到報(bào)價)


還有一個需要考慮的因素。在鉤子實(shí)現(xiàn)中:


useEffect(() => {

    if (!loading) return;

    const fetchData = async () => {

      const response = await fetch(

        `https://api.github.com/search/repositories?q=${query}`

      );

      const data = await response.json();

      setData(data.items);

      setLoading(false);

    };

    fetchData();

  }, [loading, query]);

您使用了優(yōu)化。您正在傳遞到鉤子中,這意味著該函數(shù)僅在其中一個值更改時運(yùn)行。在第二個實(shí)現(xiàn)中,您將在每個輸入更改上運(yùn)行獲取[loading, query]


以下是關(guān)于鉤子這一方面的 React 文檔的鏈接。


查看完整回答
反對 回復(fù) 2022-09-23
  • 2 回答
  • 0 關(guān)注
  • 115 瀏覽
慕課專欄
更多

添加回答

舉報(bào)

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號