React实战项目从0到1搭建(CRA官方版本)

React实战项目从0到1搭建(官方版本)

1、检查本地环境

我本地采用的nvm控制的版本,尽量建议采用nvm然后使用最新的版本来开发。

nvm:进行控制node版本的工具。 nvm版本20.10.0 node版本 20.10.0 检查node和npm环境

js 复制代码
node -v
npm -v

2、安装yarn

个人建议使用yarn,别用什么pnpm之类的,除了bug非常难解决,而且还没有原因。

js 复制代码
npm install -g yarn
yarn --version //1.22.21

3、创建React项目

官方推荐的方式,并且直接建造ts版本的

bash 复制代码
npx create-react-app nexusa --template typescript

创建过程之中可以看到安装了React核心的东西

目录结构

你的目录结构应该如下:

4、使用yarn启动

js 复制代码
cd nexusa 进入目录
yarn start 启动
yarn build 打包

启动成功!

5、 配置craco

官方修改webpack需要暴露出来webpack配置,给项目配置webpack内容。必须在package.json中

js 复制代码
npm run eject 

craco可以帮助我们可以自己配置启动的webpack,或者一些环境变量等等,允许我们在不 eject 的情况下,对 Create React App 默认配置进行灵活的定制和覆盖.

安装

js 复制代码
yarn add @craco/craco

下载完成后,我们需要在启动环境中替换为craco

找到package.json

json 复制代码
json
复制代码
"scripts": {
   "start": "craco start",
   "build": "craco build",
   "test": "craco test",
   "eject": "craco eject"
},

在项目根目录下面创建craco.config.js

文件名字不能写错。默认采用craco来加载项目,读取这个文件。 可以在这个文件中配置webpack相关的内容

ini 复制代码
ini
复制代码
module.exports = {
​
}

6、Ant Design的使用

js 复制代码
yarn add antd

修改 src/App.js,引入 antd 的按钮组件

js 复制代码
import React from 'react';
import logo from './logo.svg';
import './App.css';
import { Button } from 'antd';
function App() {
  return (
    <div className="App">
    <Button type="primary">Button</Button>
  </div>
  );
}
export default App;

7、路由react-router-dom使用

安装路由react-router-dom

js 复制代码
yarn add react-router-dom

完善文件夹

src文件夹下新建

js 复制代码
src
    pages
        --About.tsx
        --Home.tsx
    router
        --index.tsx
    index.tsx

About.tsx文件

js 复制代码
import React from "react";
import { Button } from 'antd';
export default function About(){
    return (<><div><Button type="primary">我是About</Button></div></>)
}

Home.tsx文件

js 复制代码
import React from "react";
import { Button } from 'antd';
export default function Home(){
    return (<><div><Button type="primary">我是Home</Button></div></>)
}

srx文件夹下的index.tsx文件

js 复制代码
import React from 'react';
import ReactDOM from 'react-dom/client';
import './index.css';
import App from './App';
import reportWebVitals from './reportWebVitals';

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

// If you want to start measuring performance in your app, pass a function
// to log results (for example: reportWebVitals(console.log))
// or send to an analytics endpoint. Learn more: https://bit.ly/CRA-vitals
reportWebVitals();

Home.tsx 引入使用路由:

js 复制代码
 import React from "react";
 import { useNavigate, Link ,BrowserRouter as Router, Routes, Route } from 'react-router-dom'
 import { Button } from 'antd';
 export default function Home(){
    let navigate = useNavigate();
    const toHome=()=>{
        console.log('去Home页面');
        navigate("/home", { replace: true });
    }
    const toAbout=()=>{
        console.log('点击去about页面');
        navigate("/about", { replace: true });
    }
   return (<>
    <div className="home">
        <Button type="primary" onClick={toHome}>去Home页面</Button>
        <Button type="primary" onClick={toAbout}>点击去about页面</Button>
        <Button type="primary"><Link to="/about?a=10">去about</Link></Button>
    </div>
    </>)
  }

这里直接使用路由跳转我们会发现报错:

这里运行你会发现,奇怪,项目怎么会报错呢。

因为我们还没在App.jsx里面包裹我们的路由

App.tsx文件中新增路由,并且将app包裹起来

js 复制代码
import { BrowserRouter } from "react-router-dom";
function App() {
  return (
    <BrowserRouter>
    <div className="App">
        <Home/> 
    </div>
    </BrowserRouter>
  );
}

实现路由跳转App.jsx

App.jsx里面引入路由v6 版本里面的路由 注意你的"react-router-dom": "^6.22.3",版本,路由四五六的方式都有些不一样

更改根目录下面App.jsx实现路由跳转

App.jsx文件

js 复制代码
//更改后
import React from 'react';
import { BrowserRouter as Router, Routes, Route } from 'react-router-dom';
import logo from './logo.svg';
import './App.css';
import Home from '../src/pages/Home'
import About from '../src/pages/About'
// import Routers from '../src/router/index';
function App() {
  return (
    <div className="App">
      <Router>
        <Routes>
          {/* 主页路径 */}
          <Route path="/" element={<Home />} /> 
          <Route path="/Home" element={<Home />} />
          <Route path="/About" element={<About />} /> {/* 登录页路径 */}
        </Routes>
      </Router>
    </div>
  );
}

export default App;

借助路由我们实现效果点击如下

8、

相关推荐
也无晴也无风雨26 分钟前
深入剖析输入URL按下回车,浏览器做了什么
前端·后端·计算机网络
Martin -Tang1 小时前
Vue 3 中,ref 和 reactive的区别
前端·javascript·vue.js
FakeOccupational3 小时前
nodejs 020: React语法规则 props和state
前端·javascript·react.js
放逐者-保持本心,方可放逐3 小时前
react 组件应用
开发语言·前端·javascript·react.js·前端框架
曹天骄4 小时前
next中服务端组件共享接口数据
前端·javascript·react.js
阮少年、4 小时前
java后台生成模拟聊天截图并返回给前端
java·开发语言·前端
郝晨妤5 小时前
鸿蒙ArkTS和TS有什么区别?
前端·javascript·typescript·鸿蒙
AvatarGiser6 小时前
《ElementPlus 与 ElementUI 差异集合》Icon 图标 More 差异说明
前端·vue.js·elementui
喝旺仔la6 小时前
vue的样式知识点
前端·javascript·vue.js
别忘了微笑_cuicui6 小时前
elementUI中2个日期组件实现开始时间、结束时间(禁用日期面板、控制开始时间不能超过结束时间的时分秒)实现方案
前端·javascript·elementui