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

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

React.js 我無法擺脫加載程序圖標

React.js 我無法擺脫加載程序圖標

侃侃無極 2023-08-24 21:06:17
我正在開發一個電影應用程序。我在接收數據并在屏幕上查看數據方面沒有問題。但是當我想向我的項目添加加載器時。它永遠不會消失,而不是停留 1-2 秒。const Movies = () => {  const { movies, isLoading } = useGlobalContext();  if (isLoading) {    return <div className="loading"></div>;  }  return (    <section className="movies">      {movies.map((movie) => {        const {          imdbID: key,          Poster: poster,          Title: title,          Year,          year,        } = movie;        return (          <Link to={`/movies/${key}`} key={key} className="movie">            <article>              <img src={poster} alt={title} />              <div className="movie-info">                <h4 className="title">{title}</h4>                <p>{year}</p>              </div>            </article>          </Link>        );      })}    </section>  );};這是我的上下文頁面useGlobalContext,isLoading來自這里const AppContext = React.createContext();const AppProvider = ({ children }) => {  const [isLoading, setIsLoading] = useState(true);  const [isError, setError] = useState({ show: false, msg: "" });  const [movies, setMovies] = useState([]);  const [query, setQuery] = useState("spider-man");  const fetchMovies = async (url) => {    setIsLoading(true);    try {      const response = await fetch(url);      const data = await response.json();      if (data.Response === "True") {        setMovies(data.Search);        setError({ show: false, msg: "" });      } else {        setError({ show: true, msg: data.Error });      }    } catch (error) {      console.log(error);    }  };  useEffect(() => {    fetchMovies(`${API_ENDPOINT}&s=${query}`);  }, []);  return (    <AppContext.Provider      value={{ isLoading, isError, movies, query, setQuery }}    >      {children}    </AppContext.Provider>  );};export const useGlobalContext = () => {  return useContext(AppContext);};export { AppContext, AppProvider };
查看完整描述

1 回答

?
莫回無

TA貢獻1865條經驗 獲得超7個贊

加載資源后,您永遠不會將isLoading狀態設置回原來的狀態false


const AppProvider = ({ children }) => {

  const [isLoading, setIsLoading] = useState(true);

  const [isError, setError] = useState({ show: false, msg: "" });

  const [movies, setMovies] = useState([]);

  const [query, setQuery] = useState("spider-man");


  const fetchMovies = async (url) => {

    setIsLoading(true);

    try {

      const response = await fetch(url);

      const data = await response.json();

      if (data.Response === "True") {

        setMovies(data.Search);

        setError({ show: false, msg: "" });

      } else {

        setError({ show: true, msg: data.Error });

      }

      setIsLoading(false); // <--- added this bit

    } catch (error) {

      console.log(error);

      setIsLoading(false); // <--- added this bit

    }

  };


  useEffect(() => {

    fetchMovies(`${API_ENDPOINT}&s=${query}`);

  }, []);

  return (

    <AppContext.Provider

      value={{ isLoading, isError, movies, query, setQuery }}

    >

      {children}

    </AppContext.Provider>

  );

};


查看完整回答
反對 回復 2023-08-24
  • 1 回答
  • 0 關注
  • 164 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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