为任意后端构建单页应用,这个开源项目有点牛逼!

2023-10-19 15:54:44 浏览数 (1)

「前端实验室」 专注分享 Github、Gitee 等开源社区优质的前端项目、前端技术、前端学习资源以及前端资讯等各种有趣实用的前端内容。

大家好,我是「前端实验室」爱分享的了不起~

单页Web应用(single page web application,SPA):SPA 是一种特殊的 Web 应用,是加载单个 HTML 页面并在用户与应用程序交互时动态更新该页面的。

我们通常使用Laravel,Ruby on Rails或Django等框架构建服务器端渲染的应用程序,通过创建控制器,从数据库中获取数据(通过ORM),并呈现视图。

使用Inertia 也可以像使用所选的服务器端 Web 框架一样构建应用程序,使用框架的闲鱼功能进行路由、控制器、身份验证等。

但是,Inertia 视图是用 React、Vue 或 Svelte 编写的 JavaScript 页面组件。

这意味着我们可以获得客户端应用程序和现代 SPA 体验的所有功能,但无需构建 API,这就大大提高了我们的工作效率啊。

下面我们就简单介绍了解下Inertia.js

Inertia.js

Inertia 允许创建完全客户端呈现的单页应用程序,而没有现代 SPA 带来的复杂性。它通过利用我们现有服务器端模式来实现这一点。

Inertia 没有客户端路由,也不需要 API。像往常一样简单地构建控制器和页面视图!

Inertia 不是框架,也不是现有服务器端或客户端框架的替代品。相反,它旨在与他们合作。将 Inertia 视为连接两者的胶水。

如何使用Inertia?

服务器端设置:

1.安装依赖项

首先,使用 Composer 包管理器安装 Inertia 服务器端适配器。

代码语言:javascript复制
composer require inertiajs/inertia-laravel
2.根模板

设置将在第一次访问页面时加载的根模板。

用于加载网站资源(CSS 和 JavaScript),并且还将包含一个用于启动 JavaScript 应用程序的 根节点 <div>

代码语言:javascript复制
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0" />
    @vite('resources/js/app.js')
    @inertiaHead
  </head>
  <body>
    @inertia
  </body>
</html>
3.中间件

需要设置 Inertia 中间件,可以通过将中间件发布到应用程序来实现此目的。

代码语言:javascript复制
'web' => [
    // ...
    AppHttpMiddlewareHandleInertiaRequests::class,
],
4.创建响应
代码语言:javascript复制
use InertiaInertia;

class EventsController extends Controller
{
    public function show(Event $event)
    {
        return Inertia::render('Event/Show', [
            'event' => $event->only(
                'id',
                'title',
                'start_date',
                'description'
            ),
        ]);
    }
}

客户端设置:

1.安装依赖项

支持Vue2、Vue3、React、Svelte

代码语言:javascript复制
npm install @inertiajs/vue3
2.初始化应用

更新主 JavaScript 文件以启动 Inertia 应用程序。我们在这里所做的只是使用基本 Inertia 组件初始化客户端框架。

代码语言:javascript复制
import { createApp, h } from 'vue'
import { createInertiaApp } from '@inertiajs/vue3'

createInertiaApp({
  resolve: name => {
    const pages = import.meta.glob('./Pages/**/*.vue', { eager: true })
    return pages[`./Pages/${name}.vue`]
  },
  setup({ el, App, props, plugin }) {
    createApp({ render: () => h(App, props) })
      .use(plugin)
      .mount(el)
  },
})

结论

Inertia 是一个很好的解决方案,它可以让您快速构建现代 SPA,而无需创建 api,只需像往常一样简单地构建控制器和页面视图!

还有更多内容大家可以去官网阅读体验下~

0 人点赞