React18快速入门教程

项目流程

在这里插入图片描述

开发流程

在这里插入图片描述

技术选型

在这里插入图片描述

创建项目

在这里插入图片描述

执行命令:

pnpm create vite

项目配置

在这里插入图片描述

  • editorconfig:用于配置编辑器,实现使用不同的编辑器打开效果是相同的
  • 包配置:主要用于配置国内源
  • eslint配置:主要用于配置语法规则
  • prettier:主要用于配置代码格式

使用Github管理项目

在这里插入图片描述

Github的项目开源地址如下:https://github.com/zhangdapeng520/zdpreact_antd_admin

使用pnpm创建React项目

在终端执行:

pnpm create vite
  • 项目名:pc_admin
  • 框架:React
  • 语言:TypeScript

安装依赖:

pnpm i

在这里插入图片描述

使用webstorm打开并配置启动项,这个在之前vue的一些教程中经常讲到,就不赘述了。
在这里插入图片描述

浏览器访问:http://localhost:5173/
在这里插入图片描述

增加编辑器配置

.editorconfig

# 参考文档:https://editorconfig.org
# 根路径
root = true

# 对所有文件生效
[*]
# 文件的编码
charset = utf-8
# 使用空格缩进,默认是使用 tab
indent_style = space
# 缩进几个空格,默认是 4
indent_size = 2
# 结尾换行符
end_of_line = lf
# 在末尾追加一个空行
insert_final_newline = true
# 如果末尾有多余的空格,则自动去掉
trim_trailing_whitespace = true

整合prettier

在这里插入图片描述

在这里插入图片描述

安装:

pnpm add prettier -D

添加 .prettierrc.cjs:
在这里插入图片描述

module.exports = {
  // 每行最大字符数量,超过换行
  printWidth: 88,
  // 是否使用tab
  useTabs: false,
  // 缩进
  tabWidth: 2,
  // 去除结尾分号
  semi: false,
  // 使用单引号
  singleQuote: false,
  // 在jsx中使用单引号
  jsxSingleQuote: false,
  // 箭头函数如果只有一个参数,自动去掉括号
  arrowParens: "avoid",
  // 对象,数组括号与文字间空格
  bracketSpacing: true,
  // 尾随逗号
  trailingComma: "none"
}

webstorm配置prettier格式化:
在这里插入图片描述

eslint规则讲解

import js from "@eslint/js"
import globals from "globals"
import reactHooks from "eslint-plugin-react-hooks"
import reactRefresh from "eslint-plugin-react-refresh"
import tseslint from "typescript-eslint"

export default tseslint.config(
  { ignores: ["dist"] },
  {
    // 继承推荐的配置
    extends: [js.configs.recommended, ...tseslint.configs.recommended],
    // 在哪些文件中生效
    files: ["**/*.{ts,tsx}"],
    languageOptions: {
      ecmaVersion: 2020,
      globals: globals.browser
    },
    plugins: {
      "react-hooks": reactHooks,
      "react-refresh": reactRefresh
    },
    /**
     * 自定义的规则
     * off 或 0 :关闭规则
     * warn 或 1:打开的规则作为警告,不影响代码执行
     * error 或 2:打开的规则作为错误,代码不能执行,界面报错
     * */
    rules: {
      ...reactHooks.configs.recommended.rules,
      "react-refresh/only-export-components": ["warn", { allowConstantExport: true }],
      "no-console": ["error", { allowConsole: false }], // 禁止使用console
      "no-unused-vars": ["error", { allowUnusedVars: false }], // 禁止定义未使用的变量
      "no-debugger": "error", // 禁止使用debugger
      "no-var": "error" // 禁止使用var,要求使用let或者const
    }
  }
)

vite配置

配置别名:

pnpm add @types/node -D

vite.config.js

import { defineConfig } from "vite"
import react from "@vitejs/plugin-react"
import path from "path"

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [react()],
  resolve: {
    alias: {
      "@": path.resolve(__dirname, "src")
    }
  },
  server: {
    open: true
  }
})

配置vite实现代理和跨域

import { defineConfig } from "vite"
import react from "@vitejs/plugin-react"
import path from "path"

// https://vitejs.dev/config/
export default defineConfig({
  plugins: [react()],
  resolve: {
    alias: {
      "@": path.resolve(__dirname, "./src") // 配置src路径别名
    }
  },
  server: {
    open: true, // 启动服务的时候自动打开浏览器
    host: "127.0.0.1", // 启动的主机
    port: 5173, // 端口号
    proxy: {
      "/api": {
        target: "http://127.0.0.1:8888", // 后端的接口地址
        changeOrigin: true, // 跨域
        rewrite: path => path.replace(/^\/api/, "") // 重写api路径
      }
    }
  }
})

vue和react的对比

在这里插入图片描述

什么是JSX?

在js里面写html的语法:
在这里插入图片描述

JSX渲染变量

function App() {
  const message = "你好,React18"
  return (
    <>
      <div>{message}</div>
    </>
  )
}

export default App

在这里插入图片描述

JSX 渲染节点

function App() {
  const message = <h1 style={{ color: "red" }}>你好,React18</h1>
  return (
    <>
      <div>{message}</div>
    </>
  )
}

export default App

在这里插入图片描述

JSX 实现条件渲染

假设登录用户是管理员,就打印你好管理员,否则打印你好普通用户。

function App() {
  const isAdmin = true
  return (
    <>
      <div>{isAdmin ? <span>你好管理员</span> : <span>你好普通用户</span>}</div>
    </>
  )
}

export default App

在这里插入图片描述

JSX 渲染数组

比如有一个用户列表,张三,李四王五,将这个用户列表中的每个用户的名字打印出来。

function App() {
  const users = ["张三", "李四", "王五"]
  return (
    <>
      <div>
        {users.map((v, k) => {
          return <h3 key={k}>{v}</h3>
        })}
      </div>
    </>
  )
}

export default App

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Python私教

创业不易,请打赏支持我一点吧

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值