Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >🚀🚀🚀Astro:一个可以同时写React、Vue、Svelte、SolidJS等多种语言的框架

🚀🚀🚀Astro:一个可以同时写React、Vue、Svelte、SolidJS等多种语言的框架

原创
作者头像
萌萌哒草头将军
发布于 2023-08-30 16:08:01
发布于 2023-08-30 16:08:01
1.5K02
代码可运行
举报
文章被收录于专栏:前端框架前端框架
运行总次数:2
代码可运行

🎉 什么是 Astro

Astro 是「集多功能于一体的 Web 框架」,用于构建「快速、以内容为中心」的网站。

🎉 主要特性

  1. 「以内容为中心」:Astro 专为内容丰富的网站而设计。
  2. 服务器优先」:网站在服务器上渲染 HTML 时运行速度更快。
  3. 「默认快速」:在 Astro 中构建缓慢的网站是不可能的。
  4. 「易于使用」:您不需要成为专家即可使用 Astro 构建某些内容。
  5. 「功能齐全且灵活」:超100多种 Astro 集成可供选择。

说人话:默认服务端渲染、没有JavaScript,所以很快;可以集成多种框架

Astro 的目标是构建内容(静态网站),而不是web APP级别的应用。

🎉 安装

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// 全局安装
npm i -g astro
// 初始化项目
npm create astro@latest

接着根据提示回车即可

🎉 语法

🚀 类似 jsx的表达式的 HTML 超集

「Astro 组件」是 Astro 项目的基础构建块。它们是纯 HTML、无需客户端运行时的模板组件。你可以通过文件扩展名 .astro 来写 Astro 组件。

vscode 中可以使用 Astro 插件进行代码高亮

如果组件种需要 JavaScript ,那么你可以在代码栅栏、script 标签等方式加入 JavaScript 代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
---
// 组件脚本(JavaScript)
---
<!-- 组件模板(HTML + JS 表达式)-->

「Astro 组件语法」采用类似jsx的写法,不过他们还是有一些区别

💎 区别1:属性采用 html 语法
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
- <div className="box" dataValue="3" />
+ <div class="box" data-value="3" />
💎 区别2:没有根元素限制
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
---
// 包含多个元素的模板
---
<p>无需将元素包装在单个容器元素中。</p>
<p>Astro 支持模板中的多个根元素。</p>
💎 区别3:多种注释写法
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
---
---
<!-- HTML 注释语法在.astro 文件中是有效的 -->
{/* JS 注释语法也是有效的 */}

🚀 模板语法

💎 定义变量
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
---
const name = "Astro";
---
<div>
  <h1>你好 {name}!</h1>  <!-- 输出 <h1>Hello Astro!</h1> -->
</div>

💎 动态属性
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
---
const name = "Astro";
---
<h1 class={name}>支持属性表达式</h1>

<MyComponent templateLiteralNameAttribute={`MyNameIs${name}`} />
💎 Fragment 片段
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
---
const htmlString = '<p>Raw HTML content</p>';
---
<Fragment set:html={htmlString} />
<>helloe!!!</>
💎 动态标签
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
---
import MyComponent from "./MyComponent.astro";
const Element = 'div'
const Component = MyComponent;
---
<Element>Hello!</Element> <!-- 渲染成 <div>Hello!</div> -->
<Component /> <!-- 渲染成 <MyComponent /> -->
💎 CSS 样式

Astro <style> 标签内的 CSS 规则「默认自动限定范围」。即仅当前组件有效

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<style>
  h1 {
    color: red;
  }

  .text {
    color: blue;
  }
</style>

如果你想全局生效,需要使用指令

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<style is:global>
  h1 {
    color: red;
  }

  .text {
    color: blue;
  }
</style>
💎 Script 标签

Astro 允许你不使用任何框架,那么将会严格按照 html 进行编译,此时,此时你可以使用 script 标签处理事件,包括点击事件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
// <button class="alert" onClick={onClick}>Click me!</button>
// 上面的点击写法是无效的

<button class="alert">Click me!</button>

<script>
  // 在页面上找到所有带有 `alert` 类的按钮。
  const buttons = document.querySelectorAll('button.alert');

  // 处理每个按钮上的点击事件。
  buttons.forEach((button) => {
    button.addEventListener('click', () => {
      alert('按钮被点击了!');
    });
  });
</script>
💎 指令
👉 class:list

class:list 接收数组,其中有几种不同的可能值:

  • string:添加到 class 元素
  • Object:添加到键值对到 class 元素
  • Array:扁平化
  • false, null, or undefined: skipped
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<!-- 原先 -->
<span class:list={[ 'hello goodbye', { world: true }, [ 'friend' ] ]} />
<!-- 输出 -->
<span class="hello goodbye world friend"></span>
👉 set:html

set:html={string} 将 HTML 字符串注入元素中,类似于设置 el.innerHTML

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
---
const rawHTMLString = "Hello <strong>World</strong>"
---
<h1>{rawHTMLString}</h1>
  <!-- 输出:<h1>Hello &lt;strong&gt;World&lt;/strong&gt;</h1> -->
<h1 set:html={rawHTMLString} />
  <!-- 输出:<h1>Hello <strong>World</strong></h1> -->
👉 set:text

set:text={string} 将文本字符串注入元素中,类似于设置 el.innerText

👉 客户端指令

默认情况下,UI 框架组件不会在客户端激活。如果没有 client:* 指令,它的 HTML 将被渲染到页面上,而无需 JavaScript。

  • client:load 立即加载并激活组件的 JavaScript。
  • client:idle 一旦页面完成了初始加载,并触发 requestIdleCallback 事件,就会加载并激活组件中的 JavaScript
  • client:visible 一旦组件进入用户的视口,就加载组件的 JavaScript 并使其激活
  • client:media 一旦满足一定的 CSS 媒体查询条件,就会加载并激活组件的 JavaScript。
  • client:only 跳过 HTML 服务端渲染,只在客户端进行渲染
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<BuyButton client:load />

<ShowHideButton client:idle />

<HeavyImageCarousel client:visible />

<SidebarToggle client:media="(max-width: 50em)" />

<SomeReactComponent client:only="react" />
<SomePreactComponent client:only="preact" />
<SomeSvelteComponent client:only="svelte" />
<SomeVueComponent client:only="vue" />
<SomeSolidComponent client:only="solid-js" />

🚀 集成第三方框架

💎 安装集成组件
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
npx astro add react

astro.config.mjs 配置文件中添加如下

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import { defineConfig } from 'astro/config';

import react from "@astrojs/react";

// https://astro.build/config
export default defineConfig({
  integrations: [react()]
});
💎 添加组件

定义 React 组件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React from "react"
import { useState } from "react"

const ReactComponent = () => {
  const [count, setCount] = useState(0)
  return <div onClick={() => setCount(count + 1)}>React:{count}</div>
}

export default ReactComponent

引入组件

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
---
import Layout from '../layouts/Layout.astro';
import ReactComponent from "../components/ReactComponent";
---
<Layout title="Welcome to Astro.">
    <main>
        <ReactComp client:load></ReactComp>
    </main>
</Layout>

其他框架的流程类似

❝ 只有在 .astro 文件中才可以使用多种框架的语言 ❞

下面是我添加的 react、vue 框架的 count 功能组件:

🎉 总结

Astro 是一个以内容为中心的框架,默认服务端渲染,尽量没有JavaScript,所以速度很快。

Astro 除了可以集成流行的框架之外,还对标准的 markdown 语法内置支持。包括 frontmatter YAML 语法。

🎉 最后

今天的分享就到这里了,感谢大家的阅读,如果文中有错误的地方,欢迎指正!

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Astro,你真的值得试试……
上周我写了一篇关于我对 Next.js 的失望的文章。不过我接下来希望写点正能量的内容,那必须是我最喜欢的 Astro 了。
ssh_晨曦时梦见兮
2023/10/14
5490
浅谈React与SolidJS对于JSX的应用
React将JSX这一概念深入人心。但,并非只有React利用了JSX,VUE、SolidJS等JS库或者框架都使用了JSX这一概念。网上已经有大量关于JSX的概念与形式的讲述文章,不在本文的讨论范围。
w4ngzhen
2023/10/17
3520
浅谈React与SolidJS对于JSX的应用
前端框架 React 和 Svelte 的基础比较
在 JavaScript 前端开发框架中,Svelte 算是一个新来的搅局者,在网上我们已经听到很多关于 Svelte 的哔哔。因此我决定试试这个家伙,顺便跟 React 做个简单的比较。
程序狗
2021/12/21
2.4K0
【SolidJs】仅次于原生JS的超级性能!SolidJs框架教程【上】
今天被战友种草了一款前端框架,打开链接看文章,在各个指标的比较下,SolidJs脱颖而出,下面简单介绍一下这个框架,然后开始记录一下学习笔记。(Golang的事情暂时放一放,毕竟咱是专业前端「手动狗头」)。
HoMeTown
2022/10/26
4.9K0
【SolidJs】仅次于原生JS的超级性能!SolidJs框架教程【上】
新型web框架Astro快速构建内容网站
Astro 是集多功能于一体的 Web 框架,用于构建快速、以内容为中心的网站,可集成Vue、React、Tailwind、Svelte等多种前端框架,可快速构建个人博客、文档网站和公司官网等内容网站
Petrochor
2023/04/01
3.3K0
新型web框架Astro快速构建内容网站
Vue和React的区别
Vue 和 React 是当前最流行的前端框架之一,它们都具有独特的优势和不同的设计理念。在本文中,我们将比较 Vue 和 React 的一些关键方面,包括语法、组件化、状态管理、生态系统、性能和可测试性。
世间万物皆对象
2024/03/20
2620
React框架基础
郭顺发
2023/07/17
2810
前端模块化开发--React框架(一): 入门和面向组件编程
React中文官网 一、简介 1、特点 1)Declarative(声明式编码) 2)Component-Based(组件化编码) 3)Learn Once, Write Anywhere(支持客户端与服务器渲染) 4)高效 5)单向数据流 2、React高效的原因 1)虚拟(virtual)DOM, 不总是直接操作DOM 2)DOM Diff算法, 最小化页面重绘 3、相关的js核心库 1)react.js: React的核心库 2)react-dom.js: 提供操作DOM的react扩展库 3)bab
MiChong
2020/09/24
2.3K0
前端模块化开发--React框架(一): 入门和面向组件编程
《React极简教程》第一章 Hello,World!React 第一个实例:Hello,World!react.min.jsreact-dom.min.jsbabel.min.jsReact.ren
React 是一个用于构建用户界面的 JAVASCRIPT 库。 React主要用于构建UI,很多人认为 React 是 MVC 中的 V(视图)。 React 起源于 Facebook 的内部项目,用来架设 Instagram 的网站,并于 2013 年 5 月开源。 React 拥有较高的性能,代码逻辑非常简单,越来越多的人已开始关注和使用它。
一个会写诗的程序员
2018/08/20
8630
《React极简教程》第一章 Hello,World!React 第一个实例:Hello,World!react.min.jsreact-dom.min.jsbabel.min.jsReact.ren
React 单文件组件的解决方案 Omil 和 Omi Snippets
Omil是一个 webpack 的 loader,它允许你以一种名为单文件组件(SFCs)的格式撰写 Omi 组件:
wscats
2020/06/06
2.1K0
Vue 组件化开发
  将实现页面某一部分功能的结构、样式和逻辑封装成为一个整体,使其高内聚,低耦合,达到分治与复用的目的。在前端范畴,我们可以用下面的这张图来简单地理解组件化:
Demo_Null
2020/09/28
1.9K0
Vue 组件化开发
从零开始使用 Astro 的实用指南
在这个实用的Astro指南中,我将指导你完成设置过程,并告诉你如何构造你的文件。你将学习如何添加页面、交互式组件,甚至是markdown文章。我还会告诉你如何从服务器上获取数据,创建布局,并使用vanilla JavaScript和其他框架添加互动性。准备好享受一些动手的乐趣,因为我们将一起创建一个小型的网站实例。我们将构建一个多页面的网站,包括一个博客。
chuckQu
2023/09/01
1.3K0
从零开始使用 Astro 的实用指南
React、Vue3、Svelte 写法大 PK
本文将会从响应式、模板、生命周期、组件、表单、网络请求等几个方面,来对比 React、Vue3、Svelte 三大流行组件的用法区别。
ConardLi
2023/08/23
4001
React、Vue3、Svelte 写法大 PK
Astro.js 中集成 Vue 框架教程
Astro的集成能力支持我们使用Vue3编写的组件,并且支持SSR(server-side rendering)和CSH(client-side hydration)
泯泷、
2024/03/17
4830
Astro.js 中集成 Vue 框架教程
pug
而且其还提供了react插件:https://github.com/pugjs/babel-plugin-transform-react-pug
阿超
2022/12/27
5660
前端新宠 Svelte 带来哪些新思想?赶紧学起来!
Svelte 是我用过最爽的框架,就算 Vue 和 React 再强大,生态再好,我还是更喜欢 Svelte,因为它开发起来真的很爽。
德育处主任
2022/09/09
4.4K0
前端新宠 Svelte 带来哪些新思想?赶紧学起来!
再次入门 react ,不一样的收获
更适合入门 react 的学习,因为本人没有正儿八经的 react 的项目经验。 之前因为 react 太难了从入门到放弃,后来因为疫情期间参与公司 react+ts 直播项目,打酱油再次入门 react,随着公司技术转向 react 开始入门 react。
sunseekers
2020/06/03
1.8K0
【React】学习笔记(一)——React入门、面向组件编程、函数柯里化
用于构建用户界面的 Javascript 库,它主要专注于界面与视图。采用组件化模式、声明式编码,提高开发效率及组件复用率。在React Native中可以使用React语法进行移动端开发。使用虚拟DOM+优秀的Diffing算法,尽量减少与真实DOM的交互。
鸡先生
2022/10/29
5.3K0
【React】学习笔记(一)——React入门、面向组件编程、函数柯里化
React两大组件,三大核心属性,事件处理和函数柯里化
3.我们编码时基本只需要操作react的虚拟DOM相关数据, react会转换为真实DOM变化而更新界。
大忽悠爱学习
2021/11/15
3.2K0
React语法基础之JSX
概述 React的核心机制之一就是可以在内存中创建虚拟的DOM元素。React利用虚拟DOM来减少对实际DOM的操作从而提升性能。 JSX是什么 JSX是React的核心组成部分,它使用XML标记的方式去直接声明界面,界面组件之间可以互相嵌套。React发明了JSX,利用HTML语法来创建虚拟DOM。当遇到<,JSX就当HTML解析,遇到{就当JavaScript解析。使用虚拟DOM可以将React的语法转换为标准的JS语言。 简单来说,JSX就是Javascript和XML结合的一种格式。 JSX
xiangzhihong
2018/02/06
1.9K0
React语法基础之JSX
推荐阅读
相关推荐
Astro,你真的值得试试……
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验