iT邦幫忙

0

react batch update機制

  • 分享至 

  • xImage

我使用的react版本為18.3.1,理論上在大部分時候react都會套用batch update的優化機制?

我的程式碼如下

export default function App() {
  const [movies, setMovies] = useState(tempMovieData);
  const [watched, setWatched] = useState(tempWatchedData);
  const [loading, setLoading] = useState(false);
  const query = "batman";

  useEffect(() => {
    async function fetchMovies() {
      setLoading(true);
      const res = await fetch(
        `https://www.omdbapi.com/?apikey=${KEY}&s=${query}`
      );
      const data = await res.json();
      setMovies(data.Search);
      setLoading(false);
    }
    fetchMovies();
  }, []);
  return (
    <>
      <Navbar>
        <Search />
        <Numersults movies={movies} />
      </Navbar>
      <Main>
        <Box>{loading ? <Loader /> : <MovieList movies={movies} />}</Box>
        <Box>
          <WatchSummary watched={watched} />
          <WatchedList watched={watched} />
        </Box>
      </Main>
    </>
  );
}

在網頁初次載入時,卻出現短暫的Loading字樣,然後才出現API的movies資料,代表setLoading(true)後有先render一次,然後setMovies(data.Search)後才render出movies的資料。但是如果是react的batch update機制,應該只會出現movies那次的資料?loading不會顯示吧?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
EricLinTW
iT邦新手 5 級 ‧ 2024-06-22 16:12:22
最佳解答

fetch 當請求的 API 是真正的遠端時,是真正的非同步,所以執行後會先 render 一次才等待回應。

blank iT邦新手 3 級 ‧ 2024-06-23 14:56:28 檢舉

了解~那看來是我對於batch update的作用域還沒有真正了解,謝謝您

我要發表回答

立即登入回答