我使用的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不會顯示吧?
fetch 當請求的 API 是真正的遠端時,是真正的非同步,所以執行後會先 render 一次才等待回應。