【问题标题】:Are layouts in nuxt.js actually useful? What are the benefits?nuxt.js 中的布局真的有用吗?有什么好处?
【发布时间】:2021-08-14 10:00:49
【问题描述】:

据我了解,布局仅有助于摆脱导入组件并不得不将每个页面包装在布局组件中。使用自动导入功能,您甚至可以摆脱导入。所以基本上你只是省去了将页面包装在布局组件中的需要。

没有组件而只有一个字符串 (layout: "my-layout") 会降低灵活性,因为您无法将道具或事件从页面组件传递给布局组件。

使用布局时有性能或其他优势吗?我认为拥有一个布局文件夹是一种很好的做法,但我没有看到在 Options API 中添加布局道具的好处。

【问题讨论】:

    标签: javascript vue.js layout nuxt.js


    【解决方案1】:

    /r/Nuxt 的这个帖子很有趣:https://www.reddit.com/r/Nuxt/comments/iy7a9u/eli5_difference_between_components_pages_and

    我会引用一些有趣的回复:

    布局:如果您有一些组件,并且您知道要在多个页面上使用它们(例如页眉和页脚),您可以将它们导入并添加到布局中,然后在页面上使用此布局需要它。无需单独导入这些必备组件并将这些组件单独添加到每个页面中,并且代码重复更少。此外,任何应该仅适用于特定页面的 css 定义都可以放入其中,而不必分别将它们添加到每个页面/组件中。

    布局实际上只是顶级包装器组件,它非常有助于将大量样板代码保留在一个位置,而不是将其插入到每个页面中。例如,我可以有一个博客布局,右侧是侧边栏,顶部是面包屑,左侧是小部件。我会创建一个“blog.vue”,这样我就可以让我的页面保持干燥。

    TLDR:您应该使用Layouts 作为顶级包装器来保持干燥。他们不应该有来自Pages 的任何道具,因为他们正在包装它们。当然,组件也可以完成这方面的工作,但它有点冗长。
    IMO 没有性能优势(一切都是组件),同时Layouts 更具语义。

    【讨论】:

    • 它强制执行约定,这是 nuxt 非常擅长的。我不认为布局不应该有道具或事件。也许导航中有一个按钮,每个页面都希望做出不同的反应。保存按钮?最后归结为偏好。对于此类琐碎的情况,我宁愿明确并将布局组件用作普通的 vue 组件,而不是依赖于字符串的约定。如果它不仅仅是渲染一个组件,我会重新考虑我的意见。
    • 因为它应该在页面之上,所以它有点全局,所以你通常使用 vuex 来处理布局中的任何反应性。我的项目中只有几个,并且有很多嵌套的页面/组件,但到目前为止这是我的入口点,我不嵌套多个布局(通常),一次只嵌套一个。
    • 这当然值得商榷。对我来说仍然是矫枉过正。我没有使用字符串而不是组件的优势。约定很好,但我会尽量减少它们,并且只有当它们以更简单和更清洁的方式解决问题时,比如使用文件夹进行路由。每个约定都会增加复杂性,我们应该牢记这一点。
    猜你喜欢
    • 1970-01-01
    • 2011-03-15
    • 1970-01-01
    • 2011-09-28
    • 2012-03-26
    • 2011-04-24
    • 2018-08-17
    • 2014-02-16
    • 1970-01-01
    相关资源
    最近更新 更多