【问题标题】:Conditionally tell of `.astro` component is being used as a route or component有条件地告诉 `.astro` 组件被用作路由或组件
【发布时间】:2022-12-30 20:51:05
【问题描述】:

在 AstroJS 框架 (https://astro.build/) 中,您可以拥有路由的 .astro 文件,您还可以将这些文件导入其他 astro 文件并将它们用作组件。我看到一个问题,根据调用的 Astro.request 属性,您只允许在文件用作路由时调用它们。是否可以有条件地知道文件是路由还是组件?

【问题讨论】:

    标签: astrojs


    【解决方案1】:
    • Response 有所不同,因为它是在路由页面 frontmatter 的末尾和子组件 frontmatter 执行之前发送的。所以页面路由可以改变响应,但不能改变子组件。

    参考(警告部分https://docs.astro.build/en/guides/server-side-rendering/#astrorequestheaders

    说明

    • 谈论路线,假设模式是SSR

    • 不是在谈论集成 API,而是在谈论 SSR 组件运行时 API https://docs.astro.build/en/reference/api-reference/

    • 当假设 pages/404.astro 是一条路由但也被来自 pages/[...any].astro 的组件使用时,'.astro' 文件可能既是组件又是路由

    • 那种讨厌的情况不允许使用 import.meta.url 检查它所在的路径,因此即使用作另一条路线的组件,它也可能在页面中。

    请求相似度测试

    • 路线=[...any].astro
    • 组件=pages/404.astro

    在他们每个人中都放置了以下日志

    console.log(Astro.request)
    console.log(Astro.request.headers)
    console.log(Astro.url)
    console.log(Astro.params)
    console.log(Astro.props)
    
    • 测试是通过单个请求调用(页面加载)执行的,其中执行首先通过 404.astro 导入,然后通过 [...].astro 当其 frontmatter 被执行时。
    • 然后将日志与 diff 工具进行比较

    【讨论】:

      猜你喜欢
      • 2020-11-06
      • 2016-06-03
      • 2017-11-21
      • 2017-10-11
      • 1970-01-01
      • 2020-09-15
      • 1970-01-01
      • 2022-11-11
      • 2017-02-02
      相关资源
      最近更新 更多