1 回答
TA贡献1772条经验 获得超8个赞
刷新页面时它不起作用的原因是因为photo您在导航时作为参数传递的 不再可用。但是,pathname是仍然可用的东西(因为它是 URL 本身的一部分)
因此,在ModalWrapper页面上,您可以检查是否photo不存在,然后进行新的 API 调用以获取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或包装器或分类器。这是经过此类更改后的代码和框
添加回答
举报