VueJS 与多页 Rails 6 应用程序与 Turbolinks - 布局

VueJS With Multi-Page Rails 6 App With Turbolinks - Layout

我有一个具体问题,我正在努力在网上查找相关信息。我已经使用 webpacker 成功地将 VueJS 安装到我的 Rails 6 应用程序中,并且在我的应用程序布局文件中注册了一个根组件:

<!-- application.html.erb -->
<!-- javascript pack tags loaded in head and my app component displays the template properly -->
<div id="vue-app-root">
    <app></app>
</div>

我知道在单页应用程序中,VueJS 应用程序会在访问网站时初始化一次,然后发出异步请求,view/template 更改由 VueJS 启动 - 一切都有意义。我的问题是关于 vue 应用程序初始化应该如何与多页应用程序一起工作。

应用程序是否在每次 reload/turbolink 加载时完全初始化?如果我只是在不同的页面中到处使用一些组件,我是否坚持在每次加载页面时初始化整个 VueJS 应用程序,然后再初始化组件?如果是这样,我应该让 Vue JS 应用程序在 application.html.erb 中的 body 标签(或根元素)上初始化,还是应该只在有组件的页面上初始化应用程序?

对于@sjaustirni 的回答,我要补充一点,取决于您是否要使用 Rails 集成路由,您可以拆分 2 个代码库。我的意思是:如果你只使用 Rails 作为 API 而不是路由,你应该将 Vue 项目放在它自己的 repo 中而不是混合两者。

当然,如果您正在使用 Rails' 路由,则将两者放在同一个位置是有意义的。

此外,我想分享 vue-turbolinks 的存在,这可能对您的情况有用,尤其是在使用 Hotwire 时。
这是解释它的视频:https://gorails.com/episodes/how-to-use-vuejs-and-turbolinks-together

您需要找出是什么负责您的路由 - Vue 或 Rails?

如果是Rails,那么是的,每次加载页面时都需要重新挂载 Vue 应用程序。无论您是否使用 Turbo/Turbolinks,这都适用,只要 Vue 应用程序在获取的部分中。如果获取的部分在 Vue 容器之外并且您使用 Turbo/Turbolinks,则不会重新加载 Vue 应用程序。即使对于在客户端水化的服务器呈现的 Vue 也是如此。

如果是Vue做路由,Rails可能不会做,否则Vue app会一直重载。