使用这些 React 库和云后端构建全栈应用程序。
今天,我们将学习如何以 Wing 作为后端构建全栈应用程序。
我们将使用 React 和 Vite 作为前端。
我知道还有其他框架,例如 Vue、Angular 和 Next,但 React 仍然是最常见的,迄今为止,大量值得信赖的初创公司都在使用它。
如果你还不了解,React是由 Facebook 创建的一个开源库,用于构建 Web 和原生用户界面。从代码库中可以看到,它已被超过 2040 万开发者使用。所以,它值得你投入精力。
让我们看看如何使用 Wing 作为后端。
Wing - 一种用于云的编程语言。
Winglang 是一种专为云(又称“面向云”)设计的新型开源编程语言。它允许您在云端构建应用程序,并且语法相当简单。
Wing 程序可以使用功能齐全的模拟器在本地执行(是的,不需要互联网),或者部署到任何云提供商。
您将需要v20 or higher
Wing 的 Node。
创建一个父目录(我们使用shared-counter
),并使用 Vite 设置前端,创建一个新的 React 应用。您可以使用这个 npm 命令。
npm create -y vite frontend -- --template react-ts
// once installed, you can check if it's running properly.
cd frontend
npm install
npm run dev
您可以使用此 npm 命令安装 Wing。
npm install -g winglang
您可以使用来验证安装wing -V
。
Wing 还提供了官方的VSCode 扩展和IntelliJ,后者提供语法高亮、自动补全、跳转到定义以及嵌入式 Wing 控制台支持。您可以在构建应用程序之前安装它!
创建后端目录。
mkdir ~/shared-counter/backend
cd ~/shared-counter/backend
创建一个新的空的Wing项目。
wing new empty
// This will generate three files: package.json, package-lock.json and main.w file with a simple "hello world" program
wing it // to run it in the Wing simulator
// The Wing Simulator will be opened in your browser and will show a map of your app with a single function.
//You can invoke the function from the interaction panel and check out the result.
使用该命令后结构如下wing new empty
。
bring cloud;
// define a queue, a bucket, and a counter
let bucket = new cloud.Bucket();
let counter = new cloud.Counter(initial: 1);
let queue = new cloud.Queue();
// When a message is received in the queue -> it should be consumed
// by the following closure
queue.setConsumer(inflight (message: str) => {
// Increment the distributed counter, the index variable will
// store the value before the increment
let index = counter.inc();
// Once two messages are pushed to the queue, e.g. "Wing" and "Queue".
// Two files will be created:
// - wing-1.txt with "Hello Wing"
// - wing-2.txt with "Hello Queue"
bucket.put("wing-{index}.txt", "Hello, {message}");
log("file wing-{index}.txt created");
});
您可以安装@winglibs/vite
来启动开发服务器,而不是使用它npm run dev
来启动本地 Web 服务器。
// in the backend directory
npm i @winglibs/vite
您可以使用 提供的 publicEnv 将数据发送到前端backend/main.w
。
我们来看一个小例子。
// backend/main.w
bring vite;
new vite.Vite(
root: "../frontend",
publicEnv: {
TITLE: "Wing + Vite + React"
}
);
// import it in frontend
// frontend/src/App.tsx
import "../.winglibs/wing-env.d.ts"
//You can access that value like this.
<h1>{window.wing.env.TITLE}</h1>
您可以做更多:
- 读取/更新 API 路由并使用 Wing Simulator 检查它。
- 使用后端获取值。
- 同步浏览器,
@winglibs/websockets
在后端部署一个WebSocket服务器,您可以连接这个WebSocket来接收实时通知。
您可以阅读完整的分步指南,了解如何使用 React 作为前端、Wing 作为后端构建一个简单的 Web 应用程序。测试使用 Wing Simulator 完成,并使用 Terraform 部署到 AWS。
部署后的AWS架构将是这样的。
为了给开发者提供更多选择和更好的体验,Wing 现已全面支持TypeScript (Wing)等其他语言。唯一需要注意的是,你需要安装 Wing SDK。
这也将使控制台完全可以进行本地调试和测试,而无需学习 Wing 语言。
Wing 甚至还有其他指南,因此更容易遵循。
您还可以在操场上使用 Wing来检查结构和示例。
如果你更喜欢教程,那就看这个吧!
Wing 在 GitHub 上拥有 3.5k+ 颗星,1500+ 个版本,但仍然没有发布 v1 版本,这意义重大。
快来尝试一下,做一些很酷的事情吧!
开发者生态系统已经发展壮大,许多开发人员围绕 React 构建了一些独特的东西。
我没有介绍如何使用 React,因为这是一个非常广泛的主题,我在最后粘贴了一些资源来帮助您学习 React。
为了帮助你打造一个出色的 React 项目,我们涵盖了 25 个开源项目,你可以使用它们来简化你的工作。
这些项目包含丰富的资源、想法和概念。
我甚至会提供一些学习资源,以及一些产品的项目示例来帮助你学习 React。
所有资源都是免费的,而且只针对 React。
让我们把一切都讲清楚吧!
1. Mantine Hooks - 用于状态和 UI 管理的反应钩子。
这些钩子可能并非专门针对 React,但你可以使用它来简化你的工作。这些钩子随时可用,并且每个钩子都包含大量选项。
如果我必须评价的话,这将是最有用的项目,每个人都可以使用,而不是从头开始编写代码。
相信我,获得 60 多个钩子是一件大事,因为他们有一种简单的方法可以让你看到每个钩子的演示,并且有易于遵循的文档。
使用以下 npm 命令开始。
npm install @mantine/hooks
这就是您可以将其用作useScrollIntoView
螳螂钩的一部分的方法。
import { useScrollIntoView } from '@mantine/hooks';
import { Button, Text, Group, Box } from '@mantine/core';
function Demo() {
const { scrollIntoView, targetRef } = useScrollIntoView<HTMLDivElement>({
offset: 60,
});
return (
<Group justify="center">
<Button
onClick={() =>
scrollIntoView({
alignment: 'center',
})
}
>
Scroll to target
</Button>
<Box
style={{
width: '100%',
height: '50vh',
backgroundColor: 'var(--mantine-color-blue-light)',
}}
/>
<Text ref={targetRef}>Hello there</Text>
</Group>
);
}
它们几乎囊括了所有功能,从本地存储到分页,再到滚动视图、交叉视图,甚至还有一些非常酷炫的实用工具,比如吸管和文本选择。这真是太实用了!
您可以阅读文档。
如果您正在寻找更多选项,您还可以使用替代库。
他们在 GitHub 上有超过 23k 个星,但这不仅仅是因为钩子,因为他们是 React 的组件库。
它的每周下载量为 380k+,并且v7
发布版本表明它们正在不断改进并且值得信赖。
2. React Grid Layout - 具有响应断点的可拖动和可调整大小的网格布局。
React-Grid-Layout 是专为 React 应用程序构建的响应式网格布局系统。
通过支持可拖动、可调整大小和静态小部件,它为使用网格提供了一个简单的解决方案。
与 Packery 或 Gridster 等类似系统不同,React-Grid-Layout 无需 jQuery,从而确保轻量且高效的实现。
它与服务器渲染应用程序的无缝集成以及序列化和恢复布局的能力使其成为开发人员在 React 项目中使用网格布局的宝贵工具。
使用以下 npm 命令开始。
npm install react-grid-layout
这就是使用响应式网格布局的方法。
import { Responsive as ResponsiveGridLayout } from "react-grid-layout";
class MyResponsiveGrid extends React.Component {
render() {
// {lg: layout1, md: layout2, ...}
const layouts = getLayoutsFromSomewhere();
return (
<ResponsiveGridLayout
className="layout"
layouts={layouts}
breakpoints={{ lg: 1200, md: 996, sm: 768, xs: 480, xxs: 0 }}
cols={{ lg: 12, md: 10, sm: 6, xs: 4, xxs: 2 }}
>
<div key="1">1</div>
<div key="2">2</div>
<div key="3">3</div>
</ResponsiveGridLayout>
);
}
}
您可以阅读文档并查看演示。这里有一系列的演示,甚至可以点击“查看下一个示例”来查看。
您还可以尝试codesandbox上的内容。
该项目在 GitHub 上拥有 19k+ 个 Star,被 16k+ 名开发人员使用,并且npm 包的每周下载量高达 600k+ 。
3. React Spectrum——用于实现出色用户体验的库和工具的集合。
React Spectrum 是一系列库和工具的集合,可帮助您构建自适应、可访问且强大的用户体验。
他们提供的东西太多了,很难在一篇文章中涵盖所有内容。
总的来说,他们提供了这四个库。
- 反应光谱
- React Stately - 一组庞大的 React Hooks,为您的设计系统提供跨平台状态管理。
- React Aria
- 国际化
我们将简单介绍一下 React Aria,它是一个包含无样式 React 组件和钩子的库,可帮助您为应用构建易于访问的高质量 UI 组件。
它已在各种设备、交互方式和辅助技术上进行了细致的测试,以确保为所有用户提供最佳体验。
使用以下 npm 命令开始。
npm i react-aria-components
这就是您可以构建自定义的方法select
。
import {Button, Label, ListBox, ListBoxItem, Popover, Select, SelectValue} from 'react-aria-components';
<Select>
<Label>Favorite Animal</Label>
<Button>
<SelectValue />
<span aria-hidden="true">▼</span>
</Button>
<Popover>
<ListBox>
<ListBoxItem>Cat</ListBoxItem>
<ListBoxItem>Dog</ListBoxItem>
<ListBoxItem>Kangaroo</ListBoxItem>
</ListBox>
</Popover>
</Select>
相信我,就研究目的而言,这是一个金矿。
他们使用自己强大的40 多个样式组件,远远超出了通常提供的数量。他们还拥有一套自己的设计系统,例如字体、UI、排版、动效等等。
它们在 GitHub 上拥有超过 1.1 万颗星,尽管名气不大,但质量却不俗。研究它们可以为你的代码库建设提供宝贵的参考。
4.保留 React - Tailwind CSS 和 React.js 的 UI 组件库。
Keep React 是一个基于 Tailwind CSS 和 React.js 构建的开源组件库。它提供了一组功能丰富的预设计 UI 组件,使开发人员能够简化创建现代化、响应迅速且外观精美的 Web 应用程序的流程。
使用以下 npm 命令开始。
npm i keep-react
这就是您使用时间线的方法。
"use client";
import { Timeline } from "keep-react";
import { CalendarBlank } from "phosphor-react";
export const TimelineComponent = () => {
return (
<Timeline horizontal={true}>
<Timeline.Item>
<Timeline.Point icon={<CalendarBlank size={16} />} />
<Timeline.Content>
<Timeline.Title>Keep Library v1.0.0</Timeline.Title>
<Timeline.Time>Released on December 2, 2021</Timeline.Time>
<Timeline.Body>
Get started with dozens of web components and interactive elements.
</Timeline.Body>
</Timeline.Content>
</Timeline.Item>
<Timeline.Item>
<Timeline.Point icon={<CalendarBlank size={16} />} />
<Timeline.Content>
<Timeline.Title>Keep Library v1.1.0</Timeline.Title>
<Timeline.Time>Released on December 23, 2021</Timeline.Time>
<Timeline.Body>
Get started with dozens of web components and interactive elements.
</Timeline.Body>
</Timeline.Content>
</Timeline.Item>
<Timeline.Item>
<Timeline.Point icon={<CalendarBlank size={16} />} />
<Timeline.Content>
<Timeline.Title>Keep Library v1.3.0</Timeline.Title>
<Timeline.Time>Released on January 5, 2022</Timeline.Time>
<Timeline.Body>
Get started with dozens of web components and interactive elements.
</Timeline.Body>
</Timeline.Content>
</Timeline.Item>
</Timeline>
);
}
输出如下。
这些流畅的小动画让这一切都值得,如果您想快速轻松地构建 UI,就可以使用它。
该项目在 GitHub 上拥有超过 1000 颗星,并且它的一些组件使用起来非常方便。
5. React Content Loader——由 SVG 驱动的组件,可轻松创建骨架加载。
该项目为您提供了一个由 SVG 驱动的组件,可轻松创建占位符加载(如 Facebook 的卡片加载)。
在加载过程中使用骨架来提示用户内容仍在加载中。
总的来说,这是一个非常实用的项目,可以提升整体用户体验。
使用以下 npm 命令开始。
npm i react-content-loader --save
您可以这样使用它。
import React from "react"
import ContentLoader from "react-content-loader"
const MyLoader = (props) => (
<ContentLoader
speed={2}
width={400}
height={160}
viewBox="0 0 400 160"
backgroundColor="#f3f3f3"
foregroundColor="#ecebeb"
{...props}
>
<rect x="48" y="8" rx="3" ry="3" width="88" height="6" />
<rect x="48" y="26" rx="3" ry="3" width="52" height="6" />
<rect x="0" y="56" rx="3" ry="3" width="410" height="6" />
<rect x="0" y="72" rx="3" ry="3" width="380" height="6" />
<rect x="0" y="88" rx="3" ry="3" width="178" height="6" />
<circle cx="20" cy="20" r="20" />
</ContentLoader>
)
export default MyLoader
您甚至可以拖动单个骨架或使用为 Facebook 和 Instagram 等不同社交媒体预定义的骨架。
该项目在 GitHub 上拥有 13k+ 个 Star,并被 GitHub 上的 45k+ 名开发人员使用。
6. React PDF——使用 React 创建 PDF 文件。
此包用于使用 React 创建 PDF。
使用以下 npm 命令开始。
npm install @react-pdf/renderer --save
这就是您可以使用它的方法。
import React from 'react';
import { Document, Page, Text, View, StyleSheet } from '@react-pdf/renderer';
// Create styles
const styles = StyleSheet.create({
page: {
flexDirection: 'row',
backgroundColor: '#E4E4E4',
},
section: {
margin: 10,
padding: 10,
flexGrow: 1,
},
});
// Create Document Component
const MyDocument = () => (
<Document>
<Page size="A4" style={styles.page}>
<View style={styles.section}>
<Text>Section #1</Text>
</View>
<View style={styles.section}>
<Text>Section #2</Text>
</View>
</Page>
</Document>
);
React-pdf 现在提供了一个名为 的钩子usePDF
,允许通过 React hook API 访问所有 PDF 创建功能。如果您需要更好地控制文档的渲染方式或更新频率,这将非常有用。
const [instance, update] = usePDF({ document });
该项目在 GitHub 上拥有 13k+ 个 Star,并且有超过 270 个版本,每周下载量超过 400k,这是一个好兆头。
7. Recharts——使用 React 和 D3 构建的重新定义图表库。
这个库的主要目的是帮助您轻松地在 React 应用程序中编写图表。
Recharts 的主要原理是。
- 只需使用 React 组件进行部署。
- 原生 SVG 支持,轻量级,仅依赖于一些 D3 子模块。
- 声明性组件,图表的组件纯粹是展示性的。
使用以下 npm 命令开始。
npm install recharts
这就是您可以使用它的方法。
<LineChart width={500} height={300} data={data} accessibilityLayer>
<XAxis dataKey="name"/>
<YAxis/>
<CartesianGrid stroke="#eee" strokeDasharray="5 5"/>
<Line type="monotone" dataKey="uv" stroke="#8884d8" />
<Line type="monotone" dataKey="pv" stroke="#82ca9d" />
<Tooltip/>
</LineChart>
他们提供了大量的自定义选项,这也是开发人员喜欢它的原因。他们还提供了一个wiki页面,用于解答常见问题。
您也可以在此处的 codesandbox 上尝试它。
该项目在 GitHub 上拥有 22k+ 个 Star,并有 200k+ 名开发人员在使用。
8. React Joyride——在您的应用中创建导游服务。
导览是向新用户展示应用或讲解新功能的绝佳方式。它能够提升用户体验,并营造个性化体验。
使用以下 npm 命令开始。
npm i react-joyride
您可以这样使用它。
import React, { useState } from 'react';
import Joyride from 'react-joyride';
/*
* If your steps are not dynamic you can use a simple array.
* Otherwise you can set it as a state inside your component.
*/
const steps = [
{
target: '.my-first-step',
content: 'This is my awesome feature!',
},
{
target: '.my-other-step',
content: 'This another awesome feature!',
},
];
export default function App() {
// If you want to delay the tour initialization you can use the `run` prop
return (
<div>
<Joyride steps={steps} />
...
</div>
);
}
它们还提供了组件列表和自定义默认用户界面的简便方法。
您还可以尝试codesandbox上的内容。
他们在 GitHub 上拥有 6k+ 颗星,并且 npm 包每周的下载量超过 25 万次。
9. SVGR——将 SVG 转换为 React 组件。
SVGR 是一个将 SVG 转换为 React 组件的通用工具。
它可以将原始 SVG 转换为可立即使用的 React 组件。
使用以下 npm 命令开始。
npm install @svgr/core
例如,你拿这个 SVG。
<?xml version="1.0" encoding="UTF-8"?>
<svg
width="48px"
height="1px"
viewBox="0 0 48 1"
version="1.1"
xmlns="http://www.w3.org/2000/svg"
xmlns:xlink="http://www.w3.org/1999/xlink"
>
<!-- Generator: Sketch 46.2 (44496) - http://www.bohemiancoding.com/sketch -->
<title>Rectangle 5</title>
<desc>Created with Sketch.</desc>
<defs></defs>
<g id="Page-1" stroke="none" stroke-width="1" fill="none" fill-rule="evenodd">
<g
id="19-Separator"
transform="translate(-129.000000, -156.000000)"
fill="#063855"
>
<g id="Controls/Settings" transform="translate(80.000000, 0.000000)">
<g id="Content" transform="translate(0.000000, 64.000000)">
<g id="Group" transform="translate(24.000000, 56.000000)">
<g id="Group-2">
<rect id="Rectangle-5" x="25" y="36" width="48" height="1"></rect>
</g>
</g>
</g>
</g>
</g>
</g>
</svg>
运行SVGR后,它将被转换为。
import * as React from 'react'
const SvgComponent = (props) => (
<svg width="1em" height="1em" viewBox="0 0 48 1" {...props}>
<path d="M0 0h48v1H0z" fill="currentColor" fillRule="evenodd" />
</svg>
)
export default SvgComponent
它使用SVGO优化了 SVG ,并使用 Prettier 格式化代码。
将 HTML 转换为 JSX 需要几个步骤:
- 将 SVG 转换为 HAST(HTML AST)
- 将 HAST 转换为 Babel AST(JSX AST)
- 使用 Babel 转换 AST(重命名属性、更改属性值等)
您可以在playground上阅读文档并检查内容。
该项目在 GitHub 上拥有 10,000 多颗星,有 800 多万开发人员使用,npm 上的每周下载量达 800,000 多次。
10. React Sortable Tree - 用于嵌套数据和层次结构的拖放可排序组件。
一个支持对分层数据进行拖放排序的 React 组件。
使用以下 npm 命令开始。
npm install react-sortable-tree --save
这就是您可以使用它的方法。
import React, { Component } from 'react';
import SortableTree from 'react-sortable-tree';
import 'react-sortable-tree/style.css'; // This only needs to be imported once in your app
export default class Tree extends Component {
constructor(props) {
super(props);
this.state = {
treeData: [
{ title: 'Chicken', children: [{ title: 'Egg' }] },
{ title: 'Fish', children: [{ title: 'fingerline' }] },
],
};
}
render() {
return (
<div style={{ height: 400 }}>
<SortableTree
treeData={this.state.treeData}
onChange={treeData => this.setState({ treeData })}
/>
</div>
);
}
}
您可以阅读文档并查看Storybook以了解一些基本和高级功能的演示。
它可能没有被积极维护(仍然没有存档),因此您也可以使用维护的分支版本。
该项目在 GitHub 上拥有 4.5k+ 个 Star,并有 5k+ 名开发人员使用。
11. React Hot Toast – 超热的 React 通知。
React Hot Toast 提供令人惊艳的默认体验,并带有便捷的自定义选项。它利用 Promise API 实现自动加载器,确保流畅的过渡。
它轻量级,大小不到 5kb,在保持易用性的同时,还为开发者提供了类似 的无头钩子useToaster()
。
首先将 Toaster 添加到您的应用中。它将负责渲染所有发出的通知。现在,您可以从任何地方触发 toast() 了!
使用以下 npm 命令开始。
npm install react-hot-toast
使用起来就是这么简单。
import toast, { Toaster } from 'react-hot-toast';
const notify = () => toast('Here is your toast.');
const App = () => {
return (
<div>
<button onClick={notify}>Make me a toast</button>
<Toaster />
</div>
);
};
他们有很多选项可以自定义,但useToaster()
钩子提供了一个无头系统,可以帮你管理通知状态。这使得构建通知系统变得更加容易。
该项目在 GitHub 上拥有 8k+ 个 Star,并有 230k+ 名开发人员在使用。
12.Payload——构建现代后端+管理UI的最佳方式。
Payload 是一个无头 CMS 和应用程序框架。它旨在加速您的开发流程,但更重要的是,随着您的应用变得越来越复杂,它不会对您造成任何阻碍。
Payload 并非黑魔法,完全开源,它既是一个应用框架,也是一个无头内容管理系统 (CMS)。它堪称 TypeScript 版的 Rails,并且还配备了管理面板。您可以观看此YouTube 视频,了解更多关于 Payload 的信息。
您可以通过使用Payload来了解所涉及的概念。
Payload 通过您选择的数据库适配器与数据库交互。目前,Payload 官方支持两种数据库适配器:
- MongoDB 与 Mongoose
- 带有 Drizzle 的 Postgres
使用以下命令开始。
npx create-payload-app@latest
您必须生成一个 Payload 密钥并更新您的密钥server.ts
以初始化 Payload。
import express from 'express'
import payload from 'payload'
require('dotenv').config()
const app = express()
const start = async () => {
await payload.init({
secret: process.env.PAYLOAD_SECRET,
express: app,
})
app.listen(3000, async () => {
console.log(
"Express is now listening for incoming connections on port 3000."
)
})
}
start()
他们还提供与 Payload + Stripe 无缝集成的电商模板。该模板拥有令人惊叹的、功能齐全的前端,包括购物车、结账流程、订单管理等组件。
Payload 在 GitHub 上拥有 18k+ 颗星,并且有超过 290 个版本,因此它们在不断改进,特别是在 DB 支持方面。
13. React Player——用于播放各种 URL 的 React 组件。
一个用于播放各种 URL 的 React 组件,包括文件路径、YouTube、Facebook、Twitch、SoundCloud、Streamable、Vimeo、Wistia、Mixcloud、DailyMotion 和 Kaltura。您可以查看支持的媒体列表。
ReactPlayer 的维护正在由 Mux 接管,这使得他们成为一个不错的选择。
使用以下 npm 命令开始。
npm install react-player
这就是您可以使用它的方法。
import React from 'react'
import ReactPlayer from 'react-player'
// Render a YouTube video player
<ReactPlayer url='https://www.youtube.com/watch?v=LXb3EKWsInQ' />
// If you only ever use one type, use imports such as react-player/youtube to reduce your bundle size.
// like this: import ReactPlayer from 'react-player/youtube'
您还可以使用react-player/lazy
延迟加载您传入的 URL 的适当播放器。这会向您的输出添加几个 reactPlayer 块,但会减少主包的大小。
import React from 'react'
import ReactPlayer from 'react-player/lazy'
// Lazy load the YouTube player
<ReactPlayer url='https://www.youtube.com/watch?v=ysz5S6PUM-U' />
您可以阅读文档并查看演示。它们提供了许多选项,包括添加字幕和轻松实现响应式。
它们在 GitHub 上拥有 8k+ 颗星,被 135k+ 名开发人员使用,并且npm 包的每周下载量高达800k+。
14. Victory – 用于构建交互式数据可视化的 React 组件。
Victory 是一个可组合 React 组件的生态系统,用于构建交互式数据可视化。
使用以下 npm 命令开始。
npm i --save victory
这就是您可以使用它的方法。
<VictoryChart
domainPadding={{ x: 20 }}
>
<VictoryHistogram
style={{
data: { fill: "#c43a31" }
}}
data={sampleHistogramDateData}
bins={[
new Date(2020, 1, 1),
new Date(2020, 4, 1),
new Date(2020, 8, 1),
new Date(2020, 11, 1)
]}
/>
</VictoryChart>
渲染效果如下。他们还提供动画和主题选项,总体来说挺实用的。
您可以阅读文档并按照教程开始使用。它们提供了大约 15 种不同的图表选项。
它也适用于React Native(文档),所以这是一个加分点。我还建议查看他们的常见问题解答,其中用代码和解释描述了一些常见问题的解决方案,例如样式、注释(标签)、轴的处理。
该项目在 GitHub 上拥有 10k+ 个 Star,并被 GitHub 上的 23k+ 名开发人员使用。
15. React Slick – React 轮播组件。
React Slick 是一个使用 React 构建的轮播组件。它是 Slick 轮播的 React 移植版本
使用以下 npm 命令开始。
npm install react-slick --save
这就是您可以使用自定义分页的方式。
import React, { Component } from "react";
import Slider from "react-slick";
import { baseUrl } from "./config";
function CustomPaging() {
const settings = {
customPaging: function(i) {
return (
<a>
<img src={`${baseUrl}/abstract0${i + 1}.jpg`} />
</a>
);
},
dots: true,
dotsClass: "slick-dots slick-thumb",
infinite: true,
speed: 500,
slidesToShow: 1,
slidesToScroll: 1
};
return (
<div className="slider-container">
<Slider {...settings}>
<div>
<img src={baseUrl + "/abstract01.jpg"} />
</div>
<div>
<img src={baseUrl + "/abstract02.jpg"} />
</div>
<div>
<img src={baseUrl + "/abstract03.jpg"} />
</div>
<div>
<img src={baseUrl + "/abstract04.jpg"} />
</div>
</Slider>
</div>
);
}
export default CustomPaging;
他们在 GitHub 上有 11k+ 个星,并且有 360k+ 个开发人员在 GitHub 上使用它。
16. Medusa——数字商务的基石。
Medusa 是一组商务模块和工具,允许您构建丰富、可靠且高性能的商务应用程序,而无需重新设计核心商务逻辑。
这些模块可以定制,用于构建高级电商商店、交易平台或任何需要基础商务功能的产品。所有模块均为开源模块,可在 npm 上免费获取。
使用以下 npm 命令开始。
npm install medusa-react @tanstack/react-query@4.22 @medusajs/medusa
将其包含在 中app.ts
。
只有 MedusaProvider 的子组件才能受益于其 hooks。因此,Storefront 组件及其子组件现在可以使用 Medusa React 公开的 hooks。
import { MedusaProvider } from "medusa-react"
import Storefront from "./Storefront"
import { QueryClient } from "@tanstack/react-query"
import React from "react"
const queryClient = new QueryClient()
const App = () => {
return (
<MedusaProvider
queryClientProviderProps={{ client: queryClient }}
baseUrl="http://localhost:9000"
>
<Storefront />
</MedusaProvider>
)
}
export default App
例如,您可以这样使用突变来创建购物车。
import { useCreateCart } from "medusa-react"
const Cart = () => {
const createCart = useCreateCart()
const handleClick = () => {
createCart.mutate({}) // create an empty cart
}
return (
<div>
{createCart.isLoading && <div>Loading...</div>}
{!createCart.data?.cart && (
<button onClick={handleClick}>
Create cart
</button>
)}
{createCart.data?.cart?.id && (
<div>Cart ID: {createCart.data?.cart.id}</div>
)}
</div>
)
}
export default Cart
他们提供了一套电子商务模块(大量选项),如折扣、价格表、礼品卡等。
他们还提供了一种简单的管理员和客户身份验证方法,您可以在文档中阅读。
他们提供了nextjs 入门模板和Medusa React作为 SDK。
该项目在 GitHub 上拥有 22k+ 个 Star,并有 4k+ 名开发人员使用。
17. React Markdown – React 的 Markdown 组件。
Markdown 至关重要,使用 React 进行渲染对于各种场景都非常有用。
它提供了一个 React 组件,能够安全地将一串 Markdown 渲染为 React 元素。您可以通过传递插件并指定要使用的组件来自定义 Markdown 的转换,以替代标准的 HTML 元素。
使用以下 npm 命令开始。
npm i react-markdown
这就是您可以使用它的方法。
import React from 'react'
import {createRoot} from 'react-dom/client'
import Markdown from 'react-markdown'
import remarkGfm from 'remark-gfm'
const markdown = `Just a link: www.nasa.gov.`
createRoot(document.body).render(
<Markdown remarkPlugins={[remarkGfm]}>{markdown}</Markdown>
)
等效的 JSX 是。
<p>
Just a link: <a href="http://www.nasa.gov">www.nasa.gov</a>.
</p>
该项目在 GitHub 上拥有 12k+ 个 Stars,每周下载量达 2700k+,并且有 200k+ 名开发人员在使用,这证明了它确实非常有用。
18. React JSONSchema Form——用于从 JSON Schema 构建 Web 表单。
react-jsonschema-form
自动从 JSON Schema 生成 React 表单,使其成为仅使用 JSON Schema 为任何数据生成表单的理想选择。它提供 uiSchema 等自定义选项,让您可以定制表单的外观,超越默认主题。
使用以下 npm 命令开始。
npm install @rjsf/core @rjsf/utils @rjsf/validator-ajv8 --save
这就是您可以使用它的方法。
import { RJSFSchema } from '@rjsf/utils';
import validator from '@rjsf/validator-ajv8';
const schema: RJSFSchema = {
title: 'Todo',
type: 'object',
required: ['title'],
properties: {
title: { type: 'string', title: 'Title', default: 'A new task' },
done: { type: 'boolean', title: 'Done?', default: false },
},
};
const log = (type) => console.log.bind(console, type);
render(
<Form
schema={schema}
validator={validator}
onChange={log('changed')}
onSubmit={log('submitted')}
onError={log('errors')}
/>,
document.getElementById('app')
);
它们提供高级自定义选项,包括自定义小部件。
它在 GitHub 上拥有超过 13000 个 Star,并有超过 5000 名开发者在使用。目前,他们已经发布v5
了 190 多个版本,持续改进中。
19. Craft.js——构建可扩展的拖放页面编辑器。
页面编辑器可以提升用户体验,但从头开始构建一个页面编辑器却可能令人望而生畏。现有的库提供了预建的编辑器,其中包含可编辑的组件,但定制通常需要修改库本身。
Craft.js 通过模块化页面编辑器组件、通过拖放功能简化自定义以及渲染管理来解决此问题。使用 React 设计您的编辑器,无需复杂的插件系统,专注于您的特定需求和规范。
使用以下 npm 命令开始。
npm install --save @craftjs/core
他们还提供了一个简短的入门教程。由于教程非常简单详细,我就不赘述了。
它在 GitHub 上有大约 6k+ 个星,但考虑到它们正在改进,它仍然很有用。
20. Gatsby——基于 React 的最佳框架,具有内置的性能、可扩展性和安全性。
Gatsby 是一个基于 React 的框架,它使开发人员能够构建闪电般快速的网站和应用程序,将动态渲染的灵活性与静态站点生成的速度相结合。
Gatsby 拥有可自定义的 UI 和对各种数据源的支持等功能,提供无与伦比的控制力和可扩展性。此外,它还能自动执行性能优化,使其成为静态网站的首选。
使用以下 npm 命令开始。
npm init gatsby
Link
这就是如何在 Gatsby(反应组件)中使用。
import React from "react"
import { Link } from "gatsby"
const Page = () => (
<div>
<p>
Check out my <Link to="/blog">blog</Link>!
</p>
<p>
{/* Note that external links still use `a` tags. */}
Follow me on <a href="https://twitter.com/gatsbyjs">Twitter</a>!
</p>
</div>
)
他们提供了一组入门模板,其中包含如何使用它、所涉及的依赖项以及每个模板的演示。
您可以阅读有关 Gatsby 的一些常见概念,例如 React Hydration、Gatsby 构建过程等。
Gatsby 在 GitHub 上拥有 55,000 多颗星,有 240,000 多位开发人员在使用
21.聊天 UI 套件 React - 在几分钟内使用 React 构建您的聊天 UI。
Chatscope 的 Chat UI Kit 是一款用于开发网页聊天应用的开源 UI 工具包。
虽然该项目尚未被广泛使用,但其功能对于刚入门的新手来说仍然非常有用。
使用以下 npm 命令开始。
npm install @chatscope/chat-ui-kit-react
这就是创建 GUI 的方法。
import styles from '@chatscope/chat-ui-kit-styles/dist/default/styles.min.css';
import { MainContainer, ChatContainer, MessageList, Message, MessageInput } from '@chatscope/chat-ui-kit-react';
<div style={{ position:"relative", height: "500px" }}>
<MainContainer>
<ChatContainer>
<MessageList>
<Message model={{
message: "Hello my friend",
sentTime: "just now",
sender: "Joe"
}} />
</MessageList>
<MessageInput placeholder="Type message here" />
</ChatContainer>
</MainContainer>
</div>
它提供了一些方便的组件TypingIndicator
,如Multiline Incoming
、等等。
我知道你们中的一些人更喜欢通过博客来了解整个结构,因此您可以阅读Rollbar 使用 Chat UI Kit React 的《如何将 ChatGPT 与 React 集成》。
您可以看到以下一些演示:
22. Botonic – 用于构建对话应用程序的 React 框架。
Botonic 是一个全栈 JavaScript 框架,用于创建可在多个平台上运行的聊天机器人和现代对话式应用:Web、移动端和消息应用(Messenger、WhatsApp、Telegram 等)。它基于 ⚛️ React、Serverless 和 Tensorflow.js 构建。
如果您不了解对话式应用程序的概念,您可以在官方博客上阅读。
使用 Botonic,您可以创建对话式应用程序,融合最佳的文本界面(简洁、自然语言交互)和图形界面(多媒体、视觉上下文、丰富的交互)。
这种强大的组合能够提供比仅依赖文本和 NLP 的传统聊天机器人更好的用户体验。
这就是您可以简单使用 Botonic 的方法。
export default class extends React.Component {
static async botonicInit({ input, session, params, lastRoutePath }) {
await humanHandOff(session))
}
render() {
return (
<Text>
Thanks for contacting us! One of our agents
will attend you as soon as possible.
</Text>
)
}
}
它们也支持 TypeScript,所以这是一个加分点。
您可以看到使用 Botonic 构建的一些示例及其源代码。
您可以阅读文档并了解如何从头开始创建对话应用程序。
23. React Flowbite——为 Flowbite 和 Tailwind CSS 构建的 React 组件。
每个人对于构建网站的 UI 都有不同的偏好。
Flowbite React 是一个开源的 UI 组件集合,内置于 React 中,带有来自 Tailwind CSS 的实用程序类,您可以将其用作用户界面和网站的起点。
使用以下 npm 命令开始。
npm i flowbite-react
这就是如何一起使用表格和键盘组件的方法。
'use client';
import { Kbd, Table } from 'flowbite-react';
import { MdKeyboardArrowDown, MdKeyboardArrowLeft, MdKeyboardArrowRight, MdKeyboardArrowUp } from 'react-icons/md';
function Component() {
return (
<Table>
<Table.Head>
<Table.HeadCell>Key</Table.HeadCell>
<Table.HeadCell>Description</Table.HeadCell>
</Table.Head>
<Table.Body className="divide-y">
<Table.Row className="bg-white dark:border-gray-700 dark:bg-gray-800">
<Table.Cell className="whitespace-nowrap font-medium text-gray-900 dark:text-white">
<Kbd>Shift</Kbd> <span>or</span> <Kbd>Tab</Kbd>
</Table.Cell>
<Table.Cell>Navigate to interactive elements</Table.Cell>
</Table.Row>
<Table.Row className="bg-white dark:border-gray-700 dark:bg-gray-800">
<Table.Cell className="whitespace-nowrap font-medium text-gray-900 dark:text-white">
<Kbd>Enter</Kbd> or <Kbd>Spacebar</Kbd>
</Table.Cell>
<Table.Cell>Ensure elements with ARIA role="button" can be activated with both key commands.</Table.Cell>
</Table.Row>
<Table.Row className="bg-white dark:border-gray-700 dark:bg-gray-800">
<Table.Cell className="whitespace-nowrap font-medium text-gray-900 dark:text-white">
<span className="inline-flex gap-1">
<Kbd icon={MdKeyboardArrowUp} />
<Kbd icon={MdKeyboardArrowDown} />
</span>
<span> or </span>
<span className="inline-flex gap-1">
<Kbd icon={MdKeyboardArrowLeft} />
<Kbd icon={MdKeyboardArrowRight} />
</span>
</Table.Cell>
<Table.Cell>Choose and activate previous/next tab.</Table.Cell>
</Table.Row>
</Table.Body>
</Table>
);
}
您可以阅读文档并查看Storybook中的功能。您还可以查看组件列表。
在我看来,如果您想快速设置 UI,但又不想最终使用高质量开源项目的预定义库组件,那么这很好。
该项目在 GitHub 上拥有超过 1.5k 个星标和 37k+ 名开发人员的用户群,得到了社区的广泛认可和信任,是一个可靠的选择。
24. DND Kit - 轻量级、高性能、可访问且可扩展的拖放功能。
这是用于 React 的强大拖放工具包,具有可定制的碰撞检测、多个激活器和自动滚动等功能。
它的设计充分考虑了 React 的理念,提供钩子函数,易于集成,无需进行重大架构变更。它支持从列表到网格再到虚拟化列表等各种用例,兼具动态性和轻量级性,且无需任何外部依赖。
使用以下 npm 命令开始。
npm install @dnd-kit/core
这就是构建可拖动和可拖放组件的方法。
Example.jsx
import React, {useState} from 'react';
import {DndContext} from '@dnd-kit/core';
import {Draggable} from './Draggable';
import {Droppable} from './Droppable';
function Example() {
const [parent, setParent] = useState(null);
const draggable = (
<Draggable id="draggable">
Go ahead, drag me.
</Draggable>
);
return (
<DndContext onDragEnd={handleDragEnd}>
{!parent ? draggable : null}
<Droppable id="droppable">
{parent === "droppable" ? draggable : 'Drop here'}
</Droppable>
</DndContext>
);
function handleDragEnd({over}) {
setParent(over ? over.id : null);
}
}
Droppable.jsx
import React from 'react';
import {useDroppable} from '@dnd-kit/core';
export function Droppable(props) {
const {isOver, setNodeRef} = useDroppable({
id: props.id,
});
const style = {
opacity: isOver ? 1 : 0.5,
};
return (
<div ref={setNodeRef} style={style}>
{props.children}
</div>
);
}
Draggable.jsx
import React from 'react';
import {useDraggable} from '@dnd-kit/core';
import {CSS} from '@dnd-kit/utilities';
function Draggable(props) {
const {attributes, listeners, setNodeRef, transform} = useDraggable({
id: props.id,
});
const style = {
// Outputs `translate3d(x, y, 0)`
transform: CSS.Translate.toString(transform),
};
return (
<button ref={setNodeRef} style={style} {...listeners} {...attributes}>
{props.children}
</button>
);
}
我将可拖动组件放在可拖放组件上。
它在 GitHub 上拥有 10k+ 颗星,并被 GitHub 上的 47k+ 名开发人员使用。
25. Expo – 使用单一 React 代码库为 Android、iOS 和 Web 开发、审查和部署原生应用程序。
Expo 是一个开源平台,用于开发可在 Android、iOS 和 Web 上运行的通用原生应用。它包含一个通用运行时和库,可让您通过编写 React 和 JavaScript 来构建原生应用。您可以阅读Expo 的核心概念。
Expo 刚创建时,React Native 尚未公开发布。这意味着没有第三方软件包。
为了让 React Native 更易于使用,他们自己开发了一系列工具来处理常见任务。其中一些工具随着时间的推移不断改进,以满足不同的需求。
Expo SDK经过全面测试,采用 TypeScript 编写,适用于 Android、iOS 和 Web 平台。Expo SDK 的各个部分都能流畅协作,升级过程轻松无忧。所有 Expo 工具和服务均可在任何 React Native 应用中完美运行。
使用以下命令开始。
# create a project named first-app
npx create-expo-app first-app
# navigate to directory
cd first-app
# to start
npx expo start
最终,您需要制作几个组件来设计任何屏幕。例如,可以使用以下代码将图像附加到屏幕上。
import { StatusBar } from 'expo-status-bar';
import { StyleSheet, View, Image } from 'react-native';
const PlaceholderImage = require('./assets/images/background-image.png');
export default function App() {
return (
<View style={styles.container}>
<View style={styles.imageContainer}>
<Image source={PlaceholderImage} style={styles.image} />
</View>
<StatusBar style="auto" />
</View>
);
}
const styles = StyleSheet.create({
container: {
flex: 1,
backgroundColor: '#25292e',
alignItems: 'center',
},
imageContainer: {
flex: 1,
paddingTop: 58,
},
image: {
width: 320,
height: 440,
borderRadius: 18,
},
});
您还可以使用相机SDK 来呈现设备前置或后置摄像头的预览,并使用通知来提供 API 来获取推送通知令牌并显示、安排、接收和响应通知。
他们还提供了您可以按照其步骤开始的分步教程。
您可以阅读文档并在 Snack 上观看Hello World 的现场演示。
它在 GitHub 上拥有 28k+ 颗星,并被 850k+ 名开发人员广泛使用。
这里有一些可以帮助您使用 React 的资源。
- React Bits - React 模式、技术、技巧和窍门。
- 30 天 React - 30 天内学习 React 的分步指南。
- React 面试问题- 前 500 个 ReactJS 面试问题与答案(35k+ 星)。
如果您正在寻找类似 React 的替代库,您可以查看 Inferno 和 Preact。
我不是说过我会涵盖所有内容吗:D
说真的,这些项目对你的 React 项目来说非常棒。我希望你能通过为这些开源项目做贡献来改善生态系统。
如果你想利用你的好奇心来构建一些很酷的东西,这些项目非常值得一试。
正如我之前提到的,开发人员体验(DX)至关重要,这些项目一直努力使其保持一流水平。
请在下面发表评论让我们知道您将在您的反应项目中使用哪个项目。
祝您拥有美好的一天!下次再见。
在 GitHub 上关注我。
关注 Winglang 以获取更多类似内容。
文章来源:https://dev.to/winglang/build-a-full-stack-app-using-these-react-libraries-and-cloud-backend-2o4b