推荐阅读
正常环境下,我们如果需要弹窗,通常是:
Modal.open(
<Dialog>
<DialogContent />
</Dialog>
)
这样子有 3 个缺点:
在一些业务场合下,intercepting routes
即可同时解决这 3 个问题。
我们看一个常见的业务场景:搜索弹窗。
# 文件结构
app
|-- @search (这个名字对应的是 layout 中的 slot name)
|-- |-- default.tsx
|-- |-- (.)search (这个名字对应的是 app/search 路由名)
|-- |-- |-- page.tsx
|-- search
|-- |-- page.tsx
|-- layout.tsx
|-- page.tsx
app/page.tsx
里面需要打开 search 弹窗,不需要调用 Modal.open
, 直接用 <Link href='/search'>
即可。@search/(.)search
intercepting routes 会拦截 /search
路由。
我们只需要在 @search/(.)search/page.tsx
中渲染所需内容(这里是搜索弹窗)。然后在 layout.tsx
中添加插槽(slot
)就好了,都是格式代码,看 demo 或者官网文档即可。
然后 Next.js
会实现:
<Link href='/search'>
)凡事都有优劣,无非取舍。
这样做的坏处是多写了一堆格式代码,我认为整个 @search 目录都是格式代码。
好处是克服了开篇所说的那 3 个缺点,且除了 @search 目录外,调用方式并未增加复杂度
Modal.open
, 现在使用 <Link>
Modal.close
, 现在使用 router.back()
(或者也可以使用 <Link>
, 那样稍复杂)如非特别声明,本站作品均为原创,遵循【自由转载-保持署名-非商用-非衍生 创意共享 3.0 许可证】。
对于转载作品,如需二次转载,请遵循原作许可。