1. 使用node创建react项目

1.1 安装react代码行工具(脚手架)

cnpm i -g create-react-app

检查 react模块包的版本:create-react-app -V

1.2 创建一个react应用程序

create-react-app myapp

  • myapp是自定义项目名

1.3 启动react项目

  • cd myapp 需要cd进入项目my-app根目录
  • npm start 启动react项目

1.4 如何解决下载慢的问题?

  • 注意: 在使用 create-react-app 来创建一个新的React应用,在拉取各种资源时,往往会非常慢,一直卡在那,因为资源还是使用了 npm下载的,我们可以换成淘宝的资源,执行指令。

npm config set registry https://registry.npm.taobao.org

  • 可以把npm指令替换成cnpm指令
  • (使用热点或移动网络下载更快)

问题: 安装脚手架报错: The fs.promises API is experimental

原因: npm版本过高或node版本过低

解决: npm i npm@6.4.1 -g

2. react中如何实现样式隔离?

在react组件中,默认所有的样式文件都是全局作用域,不存在样式隔离。

导入组件的css样式文件:

import { Component } from "react"  // 导入react内置组件
import "./Home.css"  // 手动引入样式文件

2.1 根标签选择器限制样式

2.1.1 设置组件的class值,即组件根标签选择器

  • 如果需要每一个组件样式隔离,在设置组件样式时,给每一个选择器都添加class组件根标签选择器,以区分不同组件中的样式
<div className="home"><h1>这是首页</h1>
</div>

2.1.2 在组件中的所有样式选择器都以根标签class开头

.home{font-size: 30px;
}
/* 样式隔离1:在组件中的所有样式选择器都以根标签class开头(保证各个组件的根标签样式各不相同) */
.home h1{color: red;
}

在App.js中渲染 根组件Home:

import './App.css';// 导入主页(根组件)
import Home from "./pages/Home/Home"function App() {return (<div className="App"><h1>根组件</h1><Home/></div>);
}export default App;  // ES6模块化导出App

2.2 使用CSS Modules css模块化

2.2.1 创建组件样式文件时以xxx.module.css命名,例如 Home.module.css 代替 Home.css

2.2.2 在组件jsx导入样式文件时使用import styles from ‘./xxx.module.css’ 导入,代替import ‘./xxx.css’

import styles from "./Home.module.css"  // css样式模块化导入

2.2.3 在组件中需要设置样式的标签上添加class值, className={styles.yyy} 其中yyy指的是css样式中的class值

<div className="home"><h1 className={styles.myH1}>这是首页</h1><h2 className={styles.name}>drgsrgb</h2>
</div>

2.2.4 在xxx.module.css中通过 .yyy{} 设置样式,即为局部样式

.myH1{text-decoration: underline;
}
.name{background-color: black;color: white;
}

补充:要是想设置多个样式属性,有两种方式

(1) styles.name 拼接上字符串,里面是自定义属性名

<h3 className={styles.name + " age"}>sxwec</h3>

(2) 使用模板字符串包裹,$动态调用{styles.name},再加上空格和自定义属性名

<h3 className={`${styles.name} age`}>sxwec</h3>

在Home.css中设置多属性样式即可:

.home .age{border-radius: 50%;border: 1px solid;
}

3. react项目配置代理

3.1 下载安装代理模块

cnpm install http-proxy-middleware --save

3.2 在src目录中新建setupProxy.js文件,在文件中放入如下代码(注意是src目录,不是根目录)

const { createProxyMiddleware } = require('http-proxy-middleware')module.exports = function (app) {//   /api是本地同源地址   此例为请求斗鱼数据app.use(createProxyMiddleware('/api',{target: 'https://open.douyucdn.cn',changeOrigin: true,// pathRewrite: {//   "^/api": ""// }}))
}

3.3 使用axios请求数据

按照axios模块包:cnpm i axios --save

导入axios模块:

import axios from "axios"  // 导入axios模块,用于数据请求

在componentDidMount(组件已经渲染)生命周期中,使用axios的get方法请求数据:

state = {  // 设置state状态数据roomList: []
}
componentDidMount(){axios.get("/api/RoomApi/live", {page: 1}).then(res=>{console.log(res.data);// 更新state状态数据this.setState({  roomList: res.data.data})})
}

在render()函数中渲染出斗鱼数据:

<ul>{this.state.roomList.map(item=>{return (<li key={item.room_id}><img src={item.room_src} /></li>)})}
</ul>

配置附加内容:

设置项目端口号: node_modules/react-scripts/scripts/start.js

也可以通过指令 npm run eject 把服务器配置暴漏出来, 修改scripts/start.js (这个指令不可逆)

4. react图片懒加载

4.1 下载安装懒加载模块

cnpm i react-lazyload --save

4.2 在src/assets/目录下放入懒加载占位图 logo.svg

4.3 在需要使用懒加载的组件中导入懒加载模块和占位图

import LazyLoad from "react-lazyload"  // 导入懒加载模块
import holder from "../../assets/logo.svg" // 导入占位图

4.4 在组件rander函数中创建占位图片标签img

var holderImg = <img src={holder} alt="" />  // 定义占位图变量holderImg

4.5 在组件模板中给需要懒加载的图片添加LazyLoad父标签

<LazyLoad placeholder={holderImg}><img src={item.room_src} />
</LazyLoad>
  • 通过placeholder字段动态绑定holderImg占位图变量

5. react 路由5.0配置

注意:使用react-router 5.x 版本实现

5.1 下载react的路由模块

cnpm i react-router-dom@5 --save

5.2 在入口文件 src/index.js中,从路由模块导入工具组件Router,并包裹根组件

import { HashRouter } from 'react-router-dom';  // 从路由模块导入工具组件Router

使用HashRouter工具包裹根组件:

const root = ReactDOM.createRoot(document.getElementById('root'));
root.render(// <React.StrictMode> <HashRouter>  <App /></HashRouter>// </React.StrictMode>
);
  • StrictMode 严格模式,是一个用来突出显示应用程序中潜在问题的工具,对 react框架 做出约束
  • 在严格模式下,不能使用插件,第三方模块,组件库,建议注释掉

5.3 创建路由文件src/router/index.js,并从路由模块中导入工具组件Route

import { Route, Switch} from 'react-router-dom'

5.4 创建路由组件(函数式组件),使用exact精准配置路由,并导出

export default function MyRouter(){return (<Switch>{/* 主页路由要加exact精确匹配,因为每一个路径都有/,不精确的情况下都会匹配主页 */}<Route exact path="/" component={Home}/>{/* 正常路由建议加exact,动态路由(如:/user:name)因为路径不固定,不能加exact */}<Route path="/user" component={User}/></Switch>)
}
  • 主页路由要加exact精确匹配,因为每一个路径都有/,不精确的情况下都会匹配主页
  • 正常路由建议加exact,动态路由(如:/user:name)因为路径不固定,不能加exact

导入路由跳转的组件,组件Home和组件User才能被使用:

import Home from "../pages/Home/Home"
import User from "../pages/User/User"

5.5 在App.js中导入路由组件

import RouterView from './router/index';  // 导入路由组件

5.6 在根组件App模板中添加路由组件,即路由出口

<RouterView></RouterView>

5.7 在需要跳转的页面,从路由模板导入工具组件 Link

import { Link } from "react-router-dom"  // 导入路由跳转组件

5.8 在需要跳转的页面中使用Link组件执行路由跳转

<div className="App"><h1>根组件 |<Link to="/"> 主页 | </Link><Link to="/user">个人中心</Link></h1><RouterView></RouterView>
</div>

6. react路由重定向

6.1 进行路由配置

// 相当于vue中的index.js
import { Route, Switch, Redirect } from 'react-router-dom'import Home from "../pages/Home/Home"
import User from "../pages/User/User"export default function MyRouter(){return (<Switch><Route exact path="/home" component={Home}/><Route exact path="/user" component={User}/><Redirect path="/" to="/home"/></Switch>)
}
  • Redirect组件用于路由重定向
  • to为重定向跳转到的路径

6.2 函数式组件编程式导航跳转 props.history.push()

  • 由于 HashRouter路由组件包裹了根组件App,所以HashRouter就是所有组件的父组件
  • 当路由跳转时,HashRouter这个父组件会向跳转的子组件页面props中传入路由数据
export default function User(props){function goToHome(){console.log("编程式导航", props);props.history.push("/home")   // this.$router.push("/home")  // vue的编程式导航跳转写法}return <div>这是用户页<button onClick={goToHome}>跳转到主页</button></div>
}
  • 路由跳转的页面组件会被传入三个路由信息 history, location, match
  • history:拥有路由处理函数,实现路由跳转和路由监听
  • location:拥有路由信息,主要用于路由传值
  • match:拥有路由信息,也可以用于路由传值

注意:当点击个人中心的按钮会跳转到主页,路由跳转的路径也会改变

react脚手架配置相关推荐

  1. react脚手架配置cdn

    项目是使用react脚手架搭建的,使用了customize-cra.react-app-rewired来修改脚手架默认的配置 1.添加配置项 安装和配置完成基本的config-overrides.js ...

  2. React学习笔记4: React脚手架配置代理

    方式一 在package.json中追加如下配置 "proxy":"http://localhost:5000" 说明 优点:配置简单,前端请求资源时可以不加任 ...

  3. react脚手架配置代理解决跨域问题

    一.问题描述: 控制台报错,出现跨域问题 二.解决方案 配置代理: 第一种配置方式: 在package.json中追加如下配置 "proxy":"http://local ...

  4. react脚手架配置代理总结

    ## 方法一 在package.json中追加如下配置 "proxy":"http://localhost:5000" 说明: 1. 优点:配置简单,前端请求资 ...

  5. 【Recat 应用】之 React 脚手架

    Visual Studio Code 安装 React 插件 ES7 React/Redux/GraphQL/React-Native snippets 插件 使用 create-react-app ...

  6. React 全家桶(react脚手架 redux react-redux react-router-dom ui库 reactHook)含 自定义hook的方法及使用

    文章目录 React 入门 React 简介 React 为何物 为何学习 React React 初体验 来一发 Hello React 创建虚拟 DOM 的两种方式:JS 和 JSX 虚拟 DOM ...

  7. react脚手架日常学习记录

    文章目录 一. 初始化React脚手架 1.基础相关 2.创建项目 3.脚手架项目结构 4.流程相关 二. 规范相关 三. input相关 四. react父子组件传值 五. TodoList案例小总 ...

  8. react 引用本地js_从零配置webpack 4+react脚手架(二)

    前言: 你可能也注意到了,html文件中的关于js的引用是我们手动写的,那假如我们改了输出路径或打包编译之后的文件名,那我们岂不是还要手动去修改html文件中的引用?我们怎么做到,像create-re ...

  9. react 文件 md5_从零配置webpack 4+react脚手架(二)

    前言: 你可能也注意到了,html文件中的关于js的引用是我们手动写的,那假如我们改了输出路径或打包编译之后的文件名,那我们岂不是还要手动去修改html文件中的引用?我们怎么做到,像create-re ...

  10. React脚手架应用(创建脚手架、代理配置、ajax相关、组件通信)(四)

    系列文章目录 第一章:React基础知识(React基本使用.JSX语法.React模块化与组件化)(一) 第二章:React基础知识(组件实例三大核心属性state.props.refs)(二) 第 ...

最新文章

  1. cf-Sasha and Array
  2. Java 多文件上传
  3. linux rsync 安装教程,linux下的rsync配置和使用教程
  4. php当前完整url的写法
  5. SSIS常用的包—发送Email任务
  6. java如何运行_如何运行java程序
  7. 角色和武器Shader特效开发
  8. 计算机组成存储单元地址分配,主存中存储单元地址的分配
  9. 天大《模拟电子技术基础》大作业期末考核
  10. 倍福PLC的ModbusRTU设置
  11. Diabetes 糖尿病及其并发症.|2021/1/25(未完待续)
  12. linux开组态软件,基于嵌入式Linux的组态软件实时数据库的设计
  13. Centos8使用yum安装Mysql
  14. 血与荣耀(第四章-命令的镣铐)
  15. 什么是“Bash”破绽?
  16. 华硕rt-n16无线打印服务器,华硕无线路由器RT-N16解决无线信号难题
  17. Windows 11 安装 Android 13版本的安卓子系统(带 Google Play 商店和 Magisk) 2210.40000.10.0
  18. 中国联通6G白皮书笔记
  19. 华为海思2022数字芯片笔试题(节选)
  20. armeabi-v7a armeabi arm64-v8a 有何区别 ,英雄不问出处

热门文章

  1. Vue的全屏组件vue-fullscreen
  2. Matlab实现和使用神经网络的几种方式详细讲解--附代码可下载
  3. windows通过bat批处理命令,快速清理系统垃圾文件,释放硬盘空间
  4. caxa发生文件读写异常_常见socket读写异常及错误
  5. mfc 调用绿色版的Foxit Reader / 迷你pdf阅读器.exe的同时打开一个pdf文件
  6. pushbutton flash 游戏开发
  7. idea创建j2ee_java实战项目教程分享(纯干货,建议收藏)
  8. win10 常用DOS命令
  9. 【visio】visio绘制流程图教程
  10. mkvtoolnix视频转换 v51.0.0中文版