Inertia.js 是什么,如何工作的

Inertia.js

Inertia是为开发团队和独立开发者设计的,这些人员通常使用Laravel,Ruby on Rails或Django等框架构建服务器端渲染的应用程序。他们一般通过创建控制器,从数据库中获取数据,然后数据传递给模板,然后呈现视图。

image.png

使用 Inertia,您可以像使用所选的服务器端 Web 框架一样构建应用程序。您可以使用框架的现有功能进行路由、控制器、中间件、身份验证、授权、数据获取等。

但是,Inertia 会替换应用程序的视图层。应用程序返回的视图不是通过 blade 模板使用服务器端呈现,而是 JavaScript 页面组件。这允许您使用 React、Vue 或 Svelte 构建整个前端,同时仍然享受 Laravel 或其它语言服务器端框架的功能。

正如您所料,简单地在 JavaScript 中创建前端并不能为您提供单页应用程序体验。如果单击链接,浏览器将进行整页访问,这将导致客户端框架在后续页面加载时重新启动。这就是惯性改变一切的地方。

工作原理

Inertia 的核心本质上是一个客户端路由库。它允许您在不强制重新加载整个页面的情况下进行页面访问。这是使用组件完成的,组件是围绕普通锚链接的轻量级包装器。当您单击“Inertia ”链接时,“Inertia ”会拦截该单击,并改为通过 XHR 进行访问。您甚至可以使用 在 JavaScript 中以编程方式进行这些访问。

当 Inertia 进行 XHR 访问时,服务器检测到它是 Inertia 访问并返回,而不是返回完整的 HTML 响应,而是返回包含 JavaScript 页面组件名称和数据 (props) 的 JSON 响应。然后,Inertia 将前一页组件动态交换为新页面组件,并更新浏览器的历史记录状态。

代码示例

class UsersController
{
    public function index()
    {
        $users = User::active()
            ->orderByName()
            ->get(['id', 'name', 'email']);

        return Inertia::render('Users', [
            'users' => $users
        ]);
    }
}
<script setup>
import Layout from './Layout'
import { Link, Head } from '@inertiajs/vue3'

defineProps({ users: Array })
</script>

<template>
  <Layout>
    <Head title="Users" />
    <div v-for="user in users" :key="user.id">
      <Link :href="`/users/${user.id}`">
        {{ user.name }}
      </Link>
      <div>{{ user.email }}</div>
    </div>
  </Layout>
</template>

总结

Inertia 允许您构建一个完全基于 JavaScript 的单页应用程序,而不会增加任何复杂性。

Inertia 的工作方式更像是经典的服务器端渲染应用程序。您创建控制器,从数据库中获取数据,然后渲染视图。但是,Inertia 视图是用 React、Vue 或 Svelte 编写的 JavaScript 页面组件。

简单来说,就是本来我们需要通过自己手写fetch,ajax等进行数据交互的方式被封装起来,在后台方面,我们只需要像平常写模板赋值处理就行,只不过调用的是Insertia::render方法,而前端处理几乎不变。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,491评论 5 459
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,856评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,745评论 0 319
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,196评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,073评论 4 355
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,112评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,531评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,215评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,485评论 1 290
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,578评论 2 309
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,356评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,215评论 3 312
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,583评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,898评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,174评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,497评论 2 341
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,697评论 2 335

推荐阅读更多精彩内容