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

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

為模態(tài)設置 url 查詢

為模態(tài)設置 url 查詢

BIG陽 2022-12-22 10:06:37
我正在使用圖像搜索和顯示應用程序。用戶可以點擊一張照片,然后會彈出一個模式。這些模式將id在 url 中。但是,當我刷新頁面時,模態(tài)不存在并顯示錯誤。我從 unsplash api 獲取 url,因此隨著頁面刷新重新加載,url 消失了。如何將 url 保留在 url 查詢中,以便 url 即使在頁面刷新時仍然存在?列表項import React, { useState } from "react";import { Link, BrowserRouter as Router, Route } from "react-router-dom";import ModalWrapper from "./ModalWrapper";const ListItem = ({ photo }) => {  return (    <>      <Router>        <div key={photo.id} className="grid__item card">          <div className="card__body">            <Link to={{ pathname: `/${photo.id}`, state: photo }}>              <img src={photo.urls.small} alt="" />            </Link>            <Route path="/:photoId" component={ModalWrapper} />          </div>        </div>      </Router>    </>  );};export default ListItem;模態(tài)包裝器import React from "react";import Modal from "react-modal";import { useHistory, useLocation } from "react-router-dom";const customStyles = {  content: {    top: "50%",    left: "50%",    right: "auto",    bottom: "auto",    marginRight: "-50%",    transform: "translate(-50%, -50%)"  }};Modal.setAppElement("#root");function ModalWrapper() {  const history = useHistory();  const location = useLocation();  const photo = location.state;  function downloadImage() {}  function close() {    history.push("/");  }  return (    <Modal isOpen={true} onRequestClose={close} style={customStyles}>      <img src={photo.urls.small} alt="" />      <div>        <button onClick={close} className="button">          Close        </button>        <button onClick={downloadImage()}>Download</button>      </div>    </Modal>  );}export default ModalWrapper;
查看完整描述

1 回答

?
料青山看我應如是

TA貢獻1772條經(jīng)驗 獲得超8個贊

刷新頁面時它不起作用的原因是因為photo您在導航時作為參數(shù)傳遞的 不再可用。但是,pathname是仍然可用的東西(因為它是 URL 本身的一部分)


因此,在ModalWrapper頁面上,您可以檢查是否photo不存在,然后進行新的 API 調(diào)用以獲取photo基于. 我從未使用過 unsplash API,但我認為應該是這個 API。idpathname


你ModalWrapper會看起來像這樣


function ModalWrapper() {

  const history = useHistory();

  const location = useLocation();

  const [photo, setPhoto] = useState(location.state);


  useEffect(() => {

    if (location.pathname && !location.state) {

      // call the new API here using pathname (photo ID) and setPhoto

      console.log(location.pathname);

    }

  }, [location]);


  function downloadImage() {}


  function close() {

    history.push("/");

  }


  return (

    !!photo && (

      <Modal isOpen={true} onRequestClose={close} style={customStyles}>

        <img src={photo.urls.small} alt="" />


        <div>

          <button onClick={close} className="button">

            Close

          </button>

          <button onClick={downloadImage()}>Download</button>

        </div>

      </Modal>

    )

  );

}

你還沒有問過這個,但是,我也會把它移到Router外面Route,ListItem然后把它放在App.js里面(用路由器把所有東西都包起來)。保留它ListItem就像為每個列表項設置一個路由器和路由,這不是您理想中想要的。您可能希望在應用程序中保留一個路由器和路由,它通常屬于App.js或包裝器或分類器。這是經(jīng)過此類更改后的代碼和框


查看完整回答
反對 回復 2022-12-22
  • 1 回答
  • 0 關注
  • 90 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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