亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

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

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

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

ibeautiful 2022-09-23 21:26:50
在反應鉤子中應該如何執行抓?。吭谶@兩個代碼片段中,哪一個被稱為最佳實踐或執行 fetch 的最佳反應模式?此示例用于執行操作。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>  );}此示例使用事件處理程序來執行操作。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貢獻1946條經驗 獲得超3個贊

這取決于您的用例,您應該采取哪種方法

在以下情況下獲取數據很有用useEffect

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

  • 在某些 prop 更改時獲取數據

  • 每隔一段時間獲取數據,但設置訂閱或setInterval

在下面的方案中,在處理程序中獲取數據很有用

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

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


查看完整回答
反對 回復 2022-09-23
?
GCT1015

TA貢獻1827條經驗 獲得超4個贊

我會說你應該使用鉤子實現。在 React 文檔中,建議使用它來執行副作用:


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


還有一個需要考慮的因素。在鉤子實現中:


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]);

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


以下是關于鉤子這一方面的 React 文檔的鏈接。


查看完整回答
反對 回復 2022-09-23
  • 2 回答
  • 0 關注
  • 118 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號