yggjs_react是一个用于快速创建React项目的工具,它集成了Vite、TypeScript、Zustand和React Router等现代前端技术栈,帮助开发者快速搭建高质量的React应用。

快速入门

快速入门部分将指导您如何安装yggjs_react工具、创建新项目并启动开发服务器。

安装

首先,确保您的系统已安装Node.js。然后使用npm全局安装pnpm和yggjs_react:

npm install -g pnpm
npm install -g yggjs_react

查看版本

安装完成后,可以使用以下命令查看yggjs_react的版本:

ggr --version

创建项目

使用以下命令创建一个新的React项目:

ggr create hello

这将创建一个名为"hello"的新项目目录。

启动服务

进入项目目录并安装依赖,然后启动开发服务器:

cd hello
pnpm install --registry=https://registry.npmmirror.com
pnpm dev

这将启动开发服务器,默认在 http://localhost:5173/ 上运行。

完整代码

本节详细展示了项目中各个核心文件的代码实现。

package.json

项目的配置文件,定义了项目的基本信息、脚本命令和依赖项:

{"name": "hello","private": true,"version": "0.0.0","type": "module","packageManager": "pnpm@8.15.0","scripts": {"dev": "vite","build": "tsc && vite build","lint": "eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0","preview": "vite preview"},"dependencies": {"react": "^18.3.1","react-dom": "^18.3.1","react-router-dom": "^6.28.0","zustand": "^5.0.1"},"devDependencies": {"@types/react": "^18.3.23","@types/react-dom": "^18.3.7","@typescript-eslint/eslint-plugin": "^6.21.0","@typescript-eslint/parser": "^6.21.0","@vitejs/plugin-react": "^4.3.4","eslint": "^8.57.1","eslint-plugin-react-hooks": "^4.6.2","eslint-plugin-react-refresh": "^0.4.14","typescript": "^5.9.2","vite": "^4.5.14"},"pnpm": {"registry": "https://registry.npmmirror.com"}
}

tsconfig.json

TypeScript编译器配置文件,定义了编译选项和项目包含的文件:

{"compilerOptions": {"target": "ES2020","useDefineForClassFields": true,"lib": ["ES2020","DOM","DOM.Iterable"],"module": "ESNext","skipLibCheck": true,"moduleResolution": "bundler","allowImportingTsExtensions": true,"resolveJsonModule": true,"isolatedModules": true,"noEmit": true,"jsx": "react-jsx","strict": true,"noUnusedLocals": true,"noUnusedParameters": true,"noFallthroughCasesInSwitch": true},"include": ["src"],"references": [{"path": "./tsconfig.node.json"}]
}

tsconfig.node.json

Node.js环境的TypeScript配置文件:

{"compilerOptions": {"composite": true,"skipLibCheck": true,"module": "ESNext","moduleResolution": "bundler","allowSyntheticDefaultImports": true},"include": ["vite.config.ts"]
}

vite.config.ts

Vite构建工具的配置文件:

import { defineConfig } from 'vite'
import react from '@vitejs/plugin-react'// https://vitejs.dev/config/
export default defineConfig({plugins: [react()],
})

index.html

项目的入口HTML文件:

<!doctype html>
<html lang="en"><head><meta charset="UTF-8" /><link rel="icon" type="image/svg+xml" href="/vite.svg" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Vite + React + TS</title></head><body><div id="root"></div><script type="module" src="/src/main.tsx"></script></body>
</html>

.npmrc

npm配置文件,用于设置包管理器的行为:

# 使用国内镜像源加速包下载
registry=https://registry.npmmirror.com# React 相关包的镜像源
@types:registry=https://registry.npmmirror.com
@typescript-eslint:registry=https://registry.npmmirror.com
@vitejs:registry=https://registry.npmmirror.com# 禁用包锁定文件的自动更新
package-lock=false# 设置缓存目录
cache-dir=.pnpm-cache# 启用严格的 peer dependencies 检查
strict-peer-dependencies=false# 设置网络超时时间
network-timeout=60000# 启用进度条
progress=true# 禁用工作区模式,强制在当前目录安装依赖
ignore-workspace=true

src/main.tsx

应用的入口文件,负责渲染根组件:

import React from 'react'
import ReactDOM from 'react-dom/client'
import { BrowserRouter } from 'react-router-dom'
import App from './App.tsx'
import './index.css'ReactDOM.createRoot(document.getElementById('root')!).render(<React.StrictMode><BrowserRouter><App /></BrowserRouter></React.StrictMode>,
)

src/index.css

全局样式文件,定义了应用的基本样式:

:root {font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;line-height: 1.5;font-weight: 400;color-scheme: light dark;color: rgba(255, 255, 255, 0.87);background-color: #242424;font-synthesis: none;text-rendering: optimizeLegibility;-webkit-font-smoothing: antialiased;-moz-osx-font-smoothing: grayscale;-webkit-text-size-adjust: 100%;
}a {font-weight: 500;color: #646cff;text-decoration: inherit;
}
a:hover {color: #535bf2;
}body {margin: 0;display: flex;place-items: center;min-width: 320px;min-height: 100vh;
}h1 {font-size: 3.2em;line-height: 1.1;
}button {border-radius: 8px;border: 1px solid transparent;padding: 0.6em 1.2em;font-size: 1em;font-weight: 500;font-family: inherit;background-color: #1a1a1a;color: white;cursor: pointer;transition: border-color 0.25s;
}
button:hover {border-color: #646cff;
}
button:focus,
button:focus-visible {outline: 4px auto -webkit-focus-ring-color;
}@media (prefers-color-scheme: light) {:root {color: #213547;background-color: #ffffff;}a:hover {color: #747bff;}button {background-color: #f9f9f9;color: #213547;}
}

src/App.tsx

应用的根组件,组合了布局和路由:

import { Layout } from './components'
import AppRoutes from './routers'
import './App.css'function App() {return (<Layout><AppRoutes /></Layout>)
}export default App

src/App.css

应用根组件的样式:

#root {max-width: 1280px;margin: 0 auto;padding: 2rem;text-align: center;
}nav {margin-bottom: 2rem;
}nav a {margin: 0 1rem;padding: 0.5rem 1rem;border-radius: 4px;text-decoration: none;
}nav a:hover {background-color: #f0f0f0;
}.card {padding: 2em;
}.card button {margin: 0 0.5rem;
}.card span {margin: 0 1rem;font-size: 1.2em;font-weight: bold;
}

src/routers/index.tsx

应用的路由配置文件:

import { Routes, Route } from 'react-router-dom'
import { Home, About } from '../pages'function AppRoutes() {return (<Routes><Route path="/" element={<Home />} /><Route path="/about" element={<About />} /></Routes>)
}export default AppRoutes

src/store/counter.ts

使用Zustand创建的状态管理文件:

import { create } from 'zustand'interface CounterState {count: numberincrement: () => voiddecrement: () => void
}export const useCounterStore = create<CounterState>((set) => ({count: 0,increment: () => set((state) => ({ count: state.count + 1 })),decrement: () => set((state) => ({ count: state.count - 1 })),
}))

src/components/Layout.tsx

应用的布局组件:

import { Link } from 'react-router-dom'
import { ReactNode } from 'react'interface LayoutProps {children: ReactNode
}function Layout({ children }: LayoutProps) {return (<div className="App"><nav><Link to="/">Home</Link><Link to="/about">About</Link></nav><main>{children}</main></div>)
}export default Layout

src/components/index.ts

组件导出文件:

// 组件导出
export { default as Layout } from './Layout'

src/pages/index.ts

页面组件导出文件:

// 页面组件导出
export { default as Home } from './Home'
export { default as About } from './About'

src/pages/Home.tsx

首页组件,展示了计数器功能:

import { useCounterStore } from '../store/counter'function Home() {const { count, increment, decrement } = useCounterStore()return (<div><h1>Home Page</h1><div className="card"><button onClick={decrement}>-</button><span>count is {count}</span><button onClick={increment}>+</button></div></div>)
}export default Home

src/pages/About.tsx

关于页面组件:

function About() {return (<div><h1>About Page</h1><p>This is a basic React template with Vite, TypeScript, Zustand, and React Router.</p></div>)
}export default About

启动服务

在项目根目录下执行以下命令安装依赖并启动开发服务器:

pnpm i
pnpm dev

浏览器访问

服务启动后,可以在浏览器中访问以下地址:

  • 主页: http://localhost:5173/
  • 关于页面: http://localhost:5173/about

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/919661.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/919661.shtml
英文地址,请注明出处:http://en.pswp.cn/news/919661.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

vulhub可用的docker源

这一块不太容易找&#xff0c;我试了好几个源&#xff0c;下面是20250820测试可用源 编辑方法sudo mkdir -p /etc/docker sudo vim /etc/docker/daemon.json 配置内容 [1] {"registry-mirrors" : ["https://docker.registry.cyou", "https://docker-…

基于YOLOv8-SEAttention与LLMs融合的农作物害虫智能诊断与防控决策系统

1. 引言 1.1 研究背景与意义 农作物虫害是制约农业产量与质量的重要因素。据FAO报告&#xff0c;全球每年因病虫害造成的粮食损失高达 20%–40%。传统人工巡查与经验诊断具有时效性差、成本高与专业人才不足等缺陷。近年来&#xff0c;计算机视觉特别是目标检测技术在农业检测…

从零开始构建GraphRAG红楼梦知识图谱问答项目(三)

文章结尾有CSDN官方提供的学长的联系方式&#xff01;&#xff01; 欢迎关注B站从零开始构建一个基于GraphRAG的红楼梦项目 第三集01 搭建后端服务 创建一个python文件server.py 完整源码放到文章最后了。 1.1 graphrag 相关导入 # GraphRAG 相关导入 from graphrag.query.cont…

S32K328(Arm Cortex-M7)适配CmBacktrace错误追踪

CmBacktrace 相当于重写了hard_fault函数&#xff0c;在hard_fault函数里面去分析SCB寄存器的信息和堆栈信息&#xff0c;然后把这些信息打印出来(或者写到flash)&#xff1b;通过使用串口输出产生hard_fault的堆栈信息&#xff0c;然后利用addr2line工具反推出具体的代码执行函…

AI研究引擎的简单技术实现步骤

产品愿景与核心功能 1.1 产品使命 “洞见 Weaver”是一个全栈AI Web应用,旨在将用户的复杂研究问题,通过AI驱动的动态思维导图和结构化报告,转化为一次沉浸式的、可追溯的视觉探索之旅。我们的使命是,将AI复杂的推理过程透明化,将人类的探索直觉与AI的分析能力无缝结合,…

open webui源码分析5-Tools

本文从最简单的时间工具入手&#xff0c;分析Tools相关的代码。一、安装工具git clone https://github.com/open-webui/openapi-servers cd openapi-servers# 进入时间工具目录 cd servers/timepip install -r requirements.txt# 启动服务 uvicorn main:app --host 0.0.0.0 --r…

windows下通过vscode远程调试linux c/cpp程序配置

windows下通过vscode远程调试linux c/cpp程序配置vscode插件配置linux依赖工具安装launch.json配置vscode插件配置 CodeLLDB插件需要提前下载&#xff1a; linux依赖工具安装 sudo apt update sudo apt install cmake clangdlaunch.json配置 {"version": "0…

IDEA报JDK版本问题

解决思路&#xff1a;1.找到配置jdk的IDEA配置位置settings和project structure2.先配置setting3.再修改项目结构

VirtualBox 安装 Ubuntu Server 系统及 Ubuntu 初始配置

文章目录简介VirtualBoxUbuntu Server 简介Ubuntu Server 下载安装 Ubuntu Server首选项配置导入系统镜像配置系统用户配置内存 CPU 虚拟硬盘开始安装 Ubuntu安装完成登录系统配置网络Ubuntu 系统配置安装常用工具安装 SSH设置 root 密码配置 IP 地址&#xff08;推荐自动分配I…

Milvus 可观测性最佳实践

Milvus 介绍 Milvus 是一个开源的向量数据库&#xff0c;专为处理大规模、高维度向量数据而设计&#xff0c;广泛应用于人工智能、推荐系统、图像检索、自然语言处理等场景。它支持亿级向量的高效存储与快速检索&#xff0c;内置多种相似度搜索算法&#xff08;如 HNSW、IVF、…

arcgis-空间矫正工具(将下发数据A的信息放置原始数据B的原始信息并放置到成果数据C中,主要按下发数据A的范围)

正常来说&#xff0c;可以直接相交获取&#xff0c;但是会存在原始数据B将下发数据A进行分割&#xff0c;所以相交功能会导致最终成果会产生稀碎图斑及图斑切割&#xff0c;因此&#xff0c;经学习了解&#xff0c;学会此方法进行既保留原始数据B的信息&#xff0c;又按下发数据…

MySQL深分页慢问题及性能优化

在数据驱动的应用中&#xff0c;分页是不可或缺的功能。然而&#xff0c;当数据量达到百万甚至千万级别时&#xff0c;传统基于 LIMIT OFFSET 的分页方式会遭遇严重的性能瓶颈&#xff0c;即“深分页”问题。本文将剖析其根源并提供主流的优化策略。问题根源&#xff1a;LIMIT …

漫谈《数字图像处理》之平滑

在数字图像处理中&#xff0c;平滑&#xff08;Smoothing&#xff09; 的核心目标是降低图像噪声、模糊细节或简化纹理&#xff0c;本质是通过 “局部邻域运算” 对像素值进行 “平均化” 或 “规整化”&#xff0c;让图像整体更 “平缓”。形态学平滑与高斯平滑、均值平滑等其…

机器学习之数据预处理学习总结

在机器学习中&#xff0c;数据预处理是模型训练前至关重要的环节&#xff0c;直接影响模型的性能和准确性。通过本次学习&#xff0c;我系统掌握了数据预处理的核心方法与工具&#xff0c;现将主要内容总结如下&#xff1a;一、缺失值处理缺失值是实际数据中常见的问题&#xf…

在完全没有无线网络(Wi-Fi)和移动网络(蜂窝数据)的环境下,使用安卓平板,通过USB数据线(而不是Wi-Fi)来控制电脑(版本2)

在完全没有无线网络&#xff08;Wi-Fi&#xff09;和移动网络&#xff08;蜂窝数据&#xff09;的环境下&#xff0c;要实现用安卓手机通过USB数据线控制电脑&#xff0c;核心思路是&#xff1a;利用USB数据线创建一個纯粹的、本地的有线网络连接。 这不仅是可行的&#xff0c;…

Ubuntu22.04配置网络上网

前言 安装Ubuntu系统后&#xff0c;有时会遇到无法联网、无法使用浏览器的问题。然而当宿主机已连接网络时&#xff0c;虚拟机通常也能联网&#xff0c;需要进行一些配置&#xff0c;现在就以Ubuntu22.04为例。 VMware配置打开虚拟网络编辑器 启动VMWare点击编辑&#xff0c;并…

网络协议之TCP和UDP

写在前面 本文来看下TCP和UDP协议。 我们接触这两个协议最多的应该就是在面试中了&#xff0c;经典题目就是“TCP和UDP有什么区别&#xff1f;”&#xff0c;而最常得到的答案就是TCP是面向连接的&#xff0c;而UDP是面向无连接的。 那么这里的连接到底是什么呢&#xff1f;难…

Qt音乐播放器项目实践:本地持久化与边角问题处理

本音乐播放器完整项目源码(包含各个按钮的图片文件): ly/Project-Code - Gitee.com 一.本地持久化 请注意&#xff0c;学习此部分之前需要读者具有一定的Mysql基础。如果读者能够接受无法本地持久化&#xff0c;那么可以跳过这部分内容&#xff0c;直接去看边角问题处理。我…

基于NB-IoT技术的宠物定位跟踪系统设计#基于STM32\物联网\单片机技术的宠物定位跟踪系统

基于NB-IoT技术的宠物定位跟踪系统设计#基于STM32\物联网\单片机技术的宠物定位跟踪系统在设计基于NB-IoT技术的宠物定位跟踪系统时&#xff0c;首先明确了系统分为感知层、网络层和应用层三个部分。在感知层&#xff0c;考虑到需要获取宠物位置和运动状态&#xff0c;选用GPS定…

【入门级-算法-3、基础算法:递归法】

递归是一种非常重要的算法思想&#xff0c;它指的是函数调用自身的过程。递归通常包含两个主要部分&#xff1a;基线条件&#xff08;终止条件&#xff09;和递归条件&#xff08;调用自身的条件&#xff09;。 下面通过例子来理解递归算法&#xff1a; 计算阶乘 阶乘的递归定义…