这里只有渲染部分会被移植到每个 Web 组件文件中,而它们都将使用导入映射中定义的相同 Brisa 包装器,该包装器负责使用信号和 Shadow DOM 创建 Web 组件。

Web组件的SSR

借助 Declarative Shadow DOM,现在可以完成 Web 组件的 SSR。 counter-wc.server.js 文件已经使用此行为进行了编译,因此您只需将其导入到您的服务器上并在 HTML 中呈现它并使其适应您的服务器框架。

这是一个使用 Bun.js 或 Node.js 而不使用 JSX 的示例:

ssr.js

import { renderToString } from \\\"brisa/server\\\";import { jsx } from \\\"brisa/jsx-runtime\\\";import CustomCounter from \\\"counter-wc/server\\\";const html = `                Brisa Web Component Example                        ${await renderToString(jsx(CustomCounter, { start: 10 }))}    `;console.log(html);

然后运行bun run ssr.js,您将看到使用声明式 Shadow DOM 渲染的 Web 组件的 HTML。

告诉我更多关于布里萨的事……拜托……

这些 Web 组件库与 Brisa 的集成是通过配置文件完成的:

import type { WebComponentIntegrations } from \\\"brisa\\\";export default {  \\\"custom-counter\\\": {    client: \\\"./path/to/web-component.client.js\\\",    server: \\\"./path/to/web-component.server.js\\\",    types: \\\"./path/to/web-component.types.d.ts\\\",  },} satisfies WebComponentIntegrations;

这样,SSR和TypeScript类型就会自动集成到你的项目中。您可以在任何服务器组件或另一个 Web 组件中使用该 Web 组件。

\\\"Build

如果您有兴趣了解更多信息,我邀请您订阅 Brisa 时事通讯,以接收有关 Brisa 的最新消息和更新。我们预计到九月底即可准备好发布。

Web 组件库创建者注意事项

我们鼓励您尝试 Brisa 创建您自己的 Web 组件库。如果您添加“Brisa 制造”徽章,我们将在 Brisa 页面上添加指向您的图书馆的链接。


\\\"Build

  \\\"Made

例子

如果您想查看我们在本文中解释的计数器示例的 GitHub 存储库,您可以查看并将其用作您自己创作的参考:

结论

在这篇文章中,我们了解了如何构建与 SSR 以及任何 JavaScript 框架或 Vanilla JS 配合使用的反应式 Web 组件。我们已经使用 Brisa 构建了 Web 组件,并且了解了如何将其加载到 Vanilla JS 项目中以及如何使用它进行 SSR。

我希望您喜欢这篇文章并且您学到了新的东西。如果您有任何疑问,请随时在下面的评论中询问我。我很乐意为您提供帮助。

祝您编码愉快,享受夏天剩下的时光! ??


\\\"Build

享受剩下的夏天!
","image":"http://www.luping.net/uploads/20240902/172528237066d5b842be406.png","datePublished":"2024-09-02T21:06:10+08:00","dateModified":"2024-09-02T21:06:10+08:00","author":{"@type":"Person","name":"luping.net","url":"https://www.luping.net/articlelist/0_1.html"}}
」工欲善其事,必先利其器。「—孔子《論語.錄靈公》
首頁 > 程式設計 > 使用 SSR 建構響應式 Web 元件

使用 SSR 建構響應式 Web 元件

發佈於2024-09-02
瀏覽:108

传统的Web Components编写方式对SSR(服务器端渲染)不太友好。在这篇文章中,我将向您展示如何构建与 SSR 和任何 JavaScript 框架(Vue、React、Svelte、Solid、Brisa)或 Vanilla JS 配合使用的反应式 Web 组件。

  • 介绍
  • 使用 Brisa 编写 Web 组件
  • 构建 Web 组件
  • 在 Vanilla JS 项目中加载 Web 组件
  • Web组件的SSR
  • 告诉我更多关于 Brisa 的信息...请...
  • Web 组件库创建者注意事项
  • 例子
  • 结论

介绍

我们将使用 Brisa Web 组件编译器。 Brisa 是一个 Web 框架,除了与 Next.js 或 Nuxt.js 等其他框架类似之外,还允许您构建与反应性信号、JSX 和 SSR 一起使用的反应式 Web 组件。

Build Reactive Web Components with SSR


Brisa 徽标

为此,您只需在编写 Web 组件时了解 Brisa 的语法即可。 Brisa 尚未公开,因为它目前处于 v0.1 路线图的 95.48%,但我们估计 1 个月内它将准备好发布,每个人都可以访问它。然而,即使它根本不公开,您也可以使用它来创建您自己的 Web 组件库。

使用 Brisa 编写 Web 组件

作为示例,我们将一如既往地编写一个计数器的 Web 组件,这是经典示例。

counter-wc.tsx

import type { WebContext } from "brisa";

export default function CounterWC(
  { start = 0, color = "#2cebcf" }: { start?: number; color?: string },
  { state, css }: WebContext,
) {
  const count = state(start);

  css`
    button {
      background-color: ${color};
      color: white;
      border: none;
      border-radius: 5px;
      padding: 10px;
      margin: 5px;
      cursor: pointer;
    }
    div {
      display: flex;
      justify-content: center;
      align-items: center;
    }
  `;

  return (
    
{count.value}
); }

Brisa 使用文件名来了解选择器,这里选择器将是 counter-wc。

TIP:虽然 Brisa 尚未公开,但您可以使用 TypeScript 类型来指导您如何编写 Web 组件。

在上面的示例中,状态用于创建信号,然后使用 .value 使其在 JSX 内具有反应性。 props 也是特殊信号,因为它们是只读的,所以不使用 .value 来使其更易于使用并更轻松地定义默认值,这是通过构建时优化完成的,类似于 React如果他们使用信号但相反。

CSS 模板文字允许它对颜色属性的反应性变化做出反应。此示例之外的 CSS 模板文字对于轻松制作反应式动画非常有用。重要的是要记住,Web 组件与 Shadow DOM 一起使用,因此 CSS 不会影响页面的其余部分。

构建 Web 组件

要构建Web组件,您需要运行以下命令:

brisa build -w counter-wc.tsx

该命令将生成2个文件:

[ wait ]  ? building your standalone components...
[ info ]
[ info ]   Standalone components:
[ info ]   - build/counter-wc.client.js (670.00 B)
[ info ]   - build/counter-wc.server.js (842.00 B)
[ info ]
[ info ]   ✨  Done in 42.20ms.

这些文件不是Web组件,它只是Web组件的渲染功能,在构建时优化为尽可能轻(出来的字节没有gzip).

那么,我们如何加载Web组件呢?

在 Vanilla JS 项目中加载 Web 组件

为此,您需要使用 brisa/client 在 HTML 中添加 importmap,然后导入 counter-wc.client.js 文件:


  
    Brisa Web Component Example

这里只有渲染部分会被移植到每个 Web 组件文件中,而它们都将使用导入映射中定义的相同 Brisa 包装器,该包装器负责使用信号和 Shadow DOM 创建 Web 组件。

Web组件的SSR

借助 Declarative Shadow DOM,现在可以完成 Web 组件的 SSR。 counter-wc.server.js 文件已经使用此行为进行了编译,因此您只需将其导入到您的服务器上并在 HTML 中呈现它并使其适应您的服务器框架。

这是一个使用 Bun.js 或 Node.js 而不使用 JSX 的示例:

ssr.js

import { renderToString } from "brisa/server";
import { jsx } from "brisa/jsx-runtime";
import CustomCounter from "counter-wc/server";

const html = `


    
    Brisa Web Component Example
        ${await renderToString(jsx(CustomCounter, { start: 10 }))}
    

`;

console.log(html);

然后运行bun run ssr.js,您将看到使用声明式 Shadow DOM 渲染的 Web 组件的 HTML。

告诉我更多关于布里萨的事……拜托……

这些 Web 组件库与 Brisa 的集成是通过配置文件完成的:

import type { WebComponentIntegrations } from "brisa";

export default {
  "custom-counter": {
    client: "./path/to/web-component.client.js",
    server: "./path/to/web-component.server.js",
    types: "./path/to/web-component.types.d.ts",
  },
} satisfies WebComponentIntegrations;

这样,SSR和TypeScript类型就会自动集成到你的项目中。您可以在任何服务器组件或另一个 Web 组件中使用该 Web 组件。

Build Reactive Web Components with SSR

如果您有兴趣了解更多信息,我邀请您订阅 Brisa 时事通讯,以接收有关 Brisa 的最新消息和更新。我们预计到九月底即可准备好发布。

Web 组件库创建者注意事项

我们鼓励您尝试 Brisa 创建您自己的 Web 组件库。如果您添加“Brisa 制造”徽章,我们将在 Brisa 页面上添加指向您的图书馆的链接。


Build Reactive Web Components with SSR


  Made with Brisa

例子

如果您想查看我们在本文中解释的计数器示例的 GitHub 存储库,您可以查看并将其用作您自己创作的参考:

  • https://github.com/aralroca/counter-wc

结论

在这篇文章中,我们了解了如何构建与 SSR 以及任何 JavaScript 框架或 Vanilla JS 配合使用的反应式 Web 组件。我们已经使用 Brisa 构建了 Web 组件,并且了解了如何将其加载到 Vanilla JS 项目中以及如何使用它进行 SSR。

我希望您喜欢这篇文章并且您学到了新的东西。如果您有任何疑问,请随时在下面的评论中询问我。我很乐意为您提供帮助。

祝您编码愉快,享受夏天剩下的时光! ??


Build Reactive Web Components with SSR

享受剩下的夏天!
版本聲明 本文轉載於:https://dev.to/aralroca/build-reactive-web-components-with-ssr-3pb9?1如有侵犯,請聯絡[email protected]刪除
最新教學 更多>
  • 建立一個 React Hook 以任意角度旋轉影像
    建立一個 React Hook 以任意角度旋轉影像
    在Web開發中,您可能需要旋轉影像,這在CSS中很容易做到。像這樣的簡單程式碼變換:rotate(90deg);。但是如果我們想用 JS 來做呢? TLDR 將圖像繪製到瀏覽器環境中的畫布上並旋轉它。但在此之前,我們需要做一些數學運算來保持原始影像的長寬比。 核 ...
    程式設計 發佈於2024-11-08
  • Lithe 中間件:它是如何運作的以及如何創建自己的中間件
    Lithe 中間件:它是如何運作的以及如何創建自己的中間件
    中间件提供了一种方便的机制来检查和过滤进入应用程序的 HTTP 请求。 例如,Lithe 包含检查用户是否经过身份验证的中间件。如果没有,中间件会将用户重定向到登录屏幕。如果用户通过身份验证,中间件将允许请求继续。 中间件如何在 Lithe 中工作 在 Lithe 中,中间件是能够访...
    程式設計 發佈於2024-11-08
  • 如何在 JavaScript 中建立具有重複元素的陣列?
    如何在 JavaScript 中建立具有重複元素的陣列?
    JavaScript 中重複元素的數組創建具有多次重複的相同元素的數組在各種編程場景中至關重要。在 Python 中,這可以透過列表乘法來實現,如 [2] * 5 所示。但是,此功能在 JavaScript 陣列中不能直接使用。 自訂函數方法為了滿足這種需求,一種方法是建立自訂函數,例如問題中提供的...
    程式設計 發佈於2024-11-08
  • ## MySQL 中的 LIKE 與 LOCATE:哪個運算子是效能之王?
    ## MySQL 中的 LIKE 與 LOCATE:哪個運算子是效能之王?
    MySQL LIKE 與LOCATE 效能比較在MySQL 中查找資料時,你可能會想知道LIKE 和LOCATE 哪個運算子效率更高?本文探討了這兩個運算子之間的效能差異。 在典型的使用場景中,LIKE 比 LOCATE 稍快。這主要是因為 LIKE 不像 LOCATE 那樣執行與 0 的額外比較。...
    程式設計 發佈於2024-11-08
  • 如何使用 PHP 更新多個 MySQL 行的表單資料?
    如何使用 PHP 更新多個 MySQL 行的表單資料?
    使用表單資料更新多個MySQL 行在Web 開發中,通常有一個表單,使用者可以在其中編輯資料庫中的記錄。常見的情況是使用修改後的資料更新同一個表中的多行。這可以使用 PHP 和 MySQL 來實作。 表單結構與資料擷取初始表單負責呈現要編輯的資料。在此範例中,表單從資料庫中擷取具有特定 GALLER...
    程式設計 發佈於2024-11-08
  • 為什麼我不能在 Go 中將 []byte 分配給字串?
    為什麼我不能在 Go 中將 []byte 分配給字串?
    了解位元組分配錯誤:無法將[]byte 指派給字串在嘗試讀取資料夾中的檔案時,遇到了錯誤嘗試讀取檔案內容時,「無法在多重賦值中將[]byte 指派給z(字串類型)」。讓我們深入研究這個錯誤背後的原因。 理解多重賦值當在一行中為多個變數賦值時,如程式碼所示:z, err := ioutil.ReadF...
    程式設計 發佈於2024-11-08
  • 如何使用 React 和 Typescript 建立自訂表格元件(第 2 部分)
    如何使用 React 和 Typescript 建立自訂表格元件(第 2 部分)
    介绍 耶! ?您已经完成了这个由两部分组成的系列的最后一部分!如果您还没有查看第 1 部分,请先停在此处并完成第 1 部分。别担心,我们会等你回来! ? 在第 1 部分中,我们构建了 CustomTable 组件。您可以在这里看到它的实际效果。 在第二部分中,我们将扩展该组件以添加...
    程式設計 發佈於2024-11-08
  • 使用 TypeScript 和 ioredis 在 Node.js 中建立高效能快取管理器
    使用 TypeScript 和 ioredis 在 Node.js 中建立高效能快取管理器
    使用基於 ioredis 建構的多功能、易於使用的快取管理器來提升 Node.js 應用程式的效能。簡化快取、優化效率並簡化操作。 我根據自己的需求開發了一個基於 ioredis 的類,重點關注易用性和性能。它包括 TypeScript 支持,旨在實現簡單使用和高效操作。它仍然可以進一步改進和優化...
    程式設計 發佈於2024-11-08
  • 超類別引用和子類別對象
    超類別引用和子類別對象
    Java 是一種強型別語言。 標準轉換和自動升級適用於原始型別。 嚴格執行型別相容性。 通常,一個類別的引用變數不能引用另一個類別的物件。 即使類別 X 和 Y 在結構上相同,也不可能將 X 的引用分配給 Y 的對象,因為類型不同。 一般來說,物件引用變數只能引用其類型的物件。 型別強...
    程式設計 發佈於2024-11-08
  • Flexbox 中的 flex-grow 和 width 有何不同?
    Flexbox 中的 flex-grow 和 width 有何不同?
    Flexbox中flex-grow和width的區別Flexbox提供了兩種在元素之間分配空間的主要方法:flex- grow和width。了解這些屬性之間的差異對於有效使用 Flexbox 至關重要。 Flex-grow 與 widthFlex-grow 是一個無量綱屬性,定義元素的大小擴展以填充...
    程式設計 發佈於2024-11-08
  • 如何將表單標籤和輸入水平對齊在同一行?
    如何將表單標籤和輸入水平對齊在同一行?
    實現表單標籤與輸入在同一行水平放置在網頁開發中,表單的美觀對於使用者體驗至關重要。將標籤和輸入欄位排列在同一行可以增強表單的可讀性和可用性。本文探討如何將輸入元素與其標籤無縫對齊,無論其長度為何。 初始嘗試在單一元素上對齊標籤和輸入的常見方法行涉及將輸入的寬度設為自動。然而,這通常會導致輸入寬度固定...
    程式設計 發佈於2024-11-08
  • 遞迴-1
    遞迴-1
    簡介1 函數呼叫自身的過程稱為遞歸, 對應的函數稱為遞歸函數. 由於電腦程式設計是數學的基本應用,因此讓 我們首先嘗試理解遞歸背後的數學推理。 一般來說,我們都知道函數的概念。簡而言之,函數是 提供輸入時產生輸出的數學方程式。例如: 假設函數 F(x) 是由下式定義的函數: F(...
    程式設計 發佈於2024-11-08
  • 將日誌記錄和錯誤處理中間件新增至您的 Go API
    將日誌記錄和錯誤處理中間件新增至您的 Go API
    快速注意:如果您查看了我之前關於 JWT 身份驗證的帖子並註意到一些渲染問題,那麼這些問題現已修復!請務必再看一遍,因為這些範例建立在該教程的基礎上。 :) 好吧,夥計們,我們已經運行了 Go API,添加了 JWT 身份驗證,甚至將其連接到 PostgreSQL 資料庫。但我們還沒完成!本週,我...
    程式設計 發佈於2024-11-08
  • Tensorflow 音樂預測
    Tensorflow 音樂預測
    在本文中,我將展示如何使用張量流來預測音樂風格。 在我的範例中,我比較了電子音樂和古典音樂。 您可以在我的github上找到代碼: https://github.com/victordalet/sound_to_partition I - 資料集 第一步,您需要建立一個資料集資料...
    程式設計 發佈於2024-11-08
  • useEffect 鉤子解釋
    useEffect 鉤子解釋
    useEffect 鉤子是 React 的基本組成部分,可讓您在功能元件中執行副作用。詳細分析如下: 什麼是useEffect? useEffect 掛鉤可讓您在元件中執行副作用,例如資料擷取、訂閱或手動變更 DOM。 可以認為是生命週期方法 componentDidMount、c...
    程式設計 發佈於2024-11-08

免責聲明: 提供的所有資源部分來自互聯網,如果有侵犯您的版權或其他權益,請說明詳細緣由並提供版權或權益證明然後發到郵箱:[email protected] 我們會在第一時間內為您處理。

Copyright© 2022 湘ICP备2022001581号-3