React的入门学习(一)

发布于 2025-04-21 23:43 1265 字 7 min read

做产品前,先别急着写代码:我是怎么判断一个点子值不值得做的想偷卷?但微信不支持md文档?这个软件助你!新手小白如何开发练手项目?前端常见安全问题 + 防御方法 + 面试回答吉比特(雷霆游戏)前端二面问题总结吉比特27前端实习面试纷享销客前端实习一面08-刚体约束 Constraint07-监听碰撞事件和获取碰撞信息06 - 物体休眠与休眠事件详解(Cannon.js)05-碰撞与碰撞组04 - 弹性与接触材质详解03 - Cannon 材质与摩擦系数设置02 - Cannon 引擎基础碰撞讲解01 - Cannon.js 引擎的用途和基本使用一款减轻前端图片命名工作量的图片转换器总结:一个双非大学生的两年,是怎么过来的?数学公式Input-输入框组件实现详解用HTML5实现实时ASCII艺术摄像头object-fit: contain - CSS 属性详解GSAP (GreenSock Animation Platform) 动画库学习指南Webview通信系统学习指南实现手势操控3D粒子动画?太好玩了!东田数码科技前端面试前端性能优化面试回答技巧(一)React与Vue表单的对比差异融山科技前端面经·React的入门学习(一)九方前端面试JavaScript 核心:数组/字符串 API 精要指南JavaScript的常用数组API原理解析前端练习小网站-新手突破之路前端の骚操作代码合集 (二)| 让你的网页变得有趣前端Threejs入门(五)Vue 3 响应式原理:computed的模板解包机制Vue 监听器 watch 深度解析Axios 深入解析从0到1配置vue项目跟git仓库连接!前端Three.js入门(四)你懂keep-alive吗?见过Vue的小区保安吗?前端Three.js入门(三)前端Three.js入门(二)前端Three.js入门(一)-Three的第一个简单的页面 Git 大冒险:解锁代码管理的秘密武器如何将网站加载速度提升50%?前端性能优化全攻略前端の骚操作代码合集 | 让你的网页充满恶趣味进击蓝桥杯!2025web前端HTML5uniapp-页面生命周期
React的入门学习(一) 作者: 前端AC | 原文: https://juejin.cn/post/7495570300123922444 1创建项目 react脚手架:createreactapp js npx createreactapp 名称 template typescript 创...

React的入门学习(一)

作者: 前端AC | 原文: https://juejin.cn/post/7495570300123922444

1-创建项目

react脚手架:create-react-app

npx create-react-app 名称 --template typescript

创建完成之后截图:

image-20250421142754003.png
image-20250421142754003.png

之后进入项目文件夹

cd 项目
npm run start

image-20250421143517039.png
image-20250421143517039.png
可以删除一些暂时用不到的文件:

image-20250421144727730.png
image-20250421144727730.png
首先先来看一下index.tsx文件里面的代码代表了什么意思。

import React from 'react';
import ReactDOM from 'react-dom/client'
import App from './App';
/*导入依赖:
React:React核心库
ReactDOM:React的DOM渲染库
App:你的主应用组件(从'./App'导入*/
const root = ReactDOM.createRoot(
  document.getElementById('root') as HTMLElement
);
/*创建根节点:
- 使用ReactDOM.createRoot()创建React 18新的并发模式根节点
- document.getElementById('root')获取HTML中的根DOM元素
- as HTMLElement是TypeScript的类型断言*/
root.render(
  <React.StrictMode>
    <App />
  </React.StrictMode>
);
/*渲染应用:
- 使用root.render()方法渲染应用
- <React.StrictMode>是React的严格模式,用于检测潜在问题
- <App/>是你的主应用组件
*/

项目配置:

安装 npm i @craco/craco@alpha -D。然后创建craco.config.js文件用于配置 webpack 别名的 React 项目配置文件:

const path = require('path')
const resolve =(dir)=>path.join(__dirname,dir)

module.exports={
  webpack:{
    alias:{
      '@':resolve('src')
    }
  }
}

然后我们可以在index.tsx引用一下

import App from '@/App';,会发现报错,这是ts类型检测报出来的,我们可以在tsconfig.json里面添加以下内容:

image-20250421161858306.png
image-20250421161858306.png

现在我们就能正常引入啦!

 "baseUrl": ".",// .表示当前目录,就是src
    "paths": {
      "@/*": [
        "src/*"
      ]
    }

然后我们打开浏览器,发现会有错误:

image-20250421162550170.png
image-20250421162550170.png
为什么呢?因为我们在npm run start的时候使用的还是react-scripts的启动,我们需要更换成craco start。在package.json更改成如下(注意,eject不用更改,因为会暴露出去):

image-20250421162959424.png
image-20250421162959424.png

然后重新npm run start,就成功配置好了。

image-20250421163330547.png
image-20250421163330547.png

2-代码规范设置pretter

1-配置.editorconfig文件

# http://editorconfig.org
root = true
[*]#·表示所有文件适用
charset =utf-8#设置文件字符集为 utf-8
indent_style=space #·缩进风格(tab·space )
indent_size=2#缩进大小
end_of_line =lf#控制换行类型(lfcrcrlf)
trim_trailing_whitespace = true # 去除行尾的任意空自字符
insert_final_newline = true #始终在文件木尾插入一个新行
[*.md]#表示仅-md·文件适用以下规则
max_line_length = off
trim_trailing_whitespace = false

2-想从0开始配置

安装prettier:npm i prettier -D

然后在根目录下新建.prettierrc文件,然后在里面配置我们想要的规范。

image-20250421165334677.png
image-20250421165334677.png

配置项详解

  1. useTabs

    • 作用:控制使用 Tab 缩进还是空格缩进
    • 取值:false(使用空格)
  2. tabWidth

    • 作用:当使用空格缩进时,定义空格数量
    • 取值:2(推荐)
  3. printWidth

    • 作用:单行最大字符长度
    • 取值:80(主流推荐),也可选 100120
  4. singleQuote

    • 作用:控制使用单引号/双引号
    • 取值:true(使用单引号)
  5. trailingComma

    • 作用:是否在多行结构末尾添加逗号
    • 取值:"none"(例如对象最后一个属性后不加逗号)
  6. semi

    • 作用:控制语句末尾分号
    • 取值:false(不加分号)

完整配置示例

{
  "useTabs": false,
  "tabWidth": 2,
  "printWidth": 80,
  "singleQuote": true,
  "trailingComma": "none",
  "semi": false
}

注意事项

  • 所有配置项名称需区分大小写(如 tabWidth 不能写成 tabwidth
  • 字符串值需使用双引号包裹(如 "none"
  • 建议通过 Ctrl+S 保存配置文件后重启编辑器生效
image-20250421171500092.png
image-20250421171500092.png

或者我们可以在scripts添加,然后终端我们可以npm run prettier检测。

还可以创建.prettierignore文件,放上:

# 文件/目录忽略规则列表
/dist/*
.local
.output.js
/node_modules/**
**/*.svg
**/*.sh
/public/*

然后在终端npm run prettier,就会系统给你格式化。

3-ESlint

npx eslint --init

4-目录结构的划分

image-20250421222916737.png
image-20250421222916737.png

5-安装less

npm i craco-less@2.1.0-alpha.0

craco.config.js引入CracoLessPlugin

const path = require('path')
const resolve = (dir) => path.join(__dirname, dir)
const CracoLessPlugin=require('craco-less')
module.exports = {
  plugins: [
    {plugin:CracoLessPlugin}
  ],
  webpack: {
 
    alias: {
      '@': resolve('src')
    }
  }
}

6-路由搭建

npm i react-router-dom

第一种:不方便

image-20250421225903758.png
image-20250421225903758.png
第二种:

1-先在router下面的index.tsx配置好:

import React from "react"//每次都要引入的,jsx语法
import { RouteObject } from "react-router-dom"//RouteObject 是 react-router-dom v6 提供的类型
提供了完整的路由配置类型检查
import Discover from "@/views/discover"

const routes: RouteObject[]=[
  {
    path: "/discover",
    element: <Discover/ >,

  }
]
export default routes

2-然后在views下面新建discover/index.tsx

// 修复后代码
import React from 'react';

const Discover = () => {
    return <div>discover</div>
};

export default Discover;

3-在app.tsx引入路由

import React from 'react'
import {useRoutes} from 'react-router-dom'
import routes from './router'
function App() {
  return (
    <div className="App">
      {useRoutes(routes)}
    </div>
  )
}

export default App

useRoutes` 的核心作用

  • 将路由配置转换为可渲染的 React 元素
  • 替代传统的 <Routes> 组件,允许在组件内部动态使用路由
  • 接收与 <Routes> 相同的路由配置数组(RouteObject[]

4.在index.tsx配置HashRouter:

import React from 'react'
import ReactDOM from 'react-dom/client'
import {HashRouter} from 'react-router-dom';
import 'normalize.css'
import '@/assets/CSS/index.less'
import App from '@/App'

const root = ReactDOM.createRoot(document.getElementById('root') as HTMLElement)
root.render(
  <HashRouter>
<App />
</HashRouter>
)

然后在浏览器输入/#/discover就能看见内容了。第一天学习到此结束,希望点个赞支持一下波珠波珠会一直持续学习的。