reactjs - 反应路由器添加路由到模态
问题描述
在我的主页路线'/'
中,我显示了许多项目,并且当用户向下滚动时也会对其进行分页。当用户点击一个项目时,他们会被重定向到'/items/:itemId'
并显示ItemModal
组件。问题是,当我打开例如第 30 个项目然后单击以关闭该模式时,我返回/
并再次重新呈现HomePage
(它将再次开始显示第一个项目)。我只想在打开时像弹出窗口一样显示ItemModal
在上面,而不是让它们感觉像单独的页面。HomePage
它类似于 Instagram 在探索页面上的内容,当您单击一个项目时,会出现一个带有自己 url 的模式。
我认为以下示例会帮助我并尝试实现它:https ://reactrouter.com/web/example/modal-gallery 。但是,它没有帮助,HomePage
当我关闭模式时仍然会重新渲染。我不知道我是否执行错了,或者我必须寻找其他东西。这是我到目前为止所拥有的:
const App = () => {
const location = useLocation();
const background = location.state && location.state.background;
return (
<Router history={history}>
<Switch location={background || location}>
<Route exact path="/" component={HomePage} />
<Route exact path="/items/:itemId" component={ItemModal} />
</Switch>
{background && <Route path="/items/:itemId" children={<ItemModal />} />}
</Router>
)
}
const HomePage = () => {
return (
<div id="items-feed-id" className="items-feed">
{items.map((item) => {
return (
<Link key={item.id} to={{ pathname: `/items/${item.id}`, state: { background: location } }}>
<Item item={item} />
</Link>
);
})}
</div>
);
}
const ItemModal = (props) => {
const history = useHistory();
const { productId } = useParams();
const handleClickBack = () => {
history.goBack();
};
return ReactDOM.createPortal(
<div className="modal">
<div className="close" onClick={handleClickBack}></div>
....
</div>
),
document.getElementById('item-modal')
}
如果有人能指出我可以在这里做什么来实现我想要的,我将不胜感激,因为我仍然很困惑在这里做什么以及解决这个问题的一种可能方法。
解决方案
推荐阅读
- html - 将文本从 iframe 拖放到主窗口不会删除文本
- mysql - 在 WHERE IN() 子句中选择语句
- scala - Scala Spark数据帧过滤器使用基于可用值的多列
- python - 在 Python 3.5 中,IDE 如何将三引号 (""") 视为注释?
- image - Flutter:如何将图像(裁剪)放入下一个有状态/更少的小部件
- r - 在 mutate 中声明变量
- r - ggplot2 - 线条和误差线重叠的问题
- swift - 使用可选类型协议有意义吗?
- amazon-web-services - 如何通过 Terraform 将现有隐私政策附加到 IAM 角色
- debugging - julia LoadError: UndefVarError: @showprogress 未定义