# react-study **Repository Path**: xxljunjun/react-study ## Basic Information - **Project Name**: react-study - **Description**: 后台管理系统---react+antdesign搭建的运营后台管理系统 - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 1 - **Forks**: 0 - **Created**: 2021-07-20 - **Last Updated**: 2024-10-02 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # 一、进入react学习前的准备 + 一般react开发都是用于后台管理系统的开发 + 技术栈: * Webpack----->打包器(入口,输出,loader,插件) * Babel----->javascript语法编辑器,转化成浏览器能兼容的ES5语法 * ESlint JSlint----->可组装的JavaScript和JSX检查工具 * React + React-Router-Dom * Sass---------->世界上最成熟、最稳定、最强大的专业级CSS扩展语言! * Axios---ajax请求 * Antd---react的UI组件库 * Mobx和redux---react的状态管理工具基于flux开发的 * ES6/TS * react的工程化架构都基本不一样 # 二、webpack的安装和使用 + 作用:是当下前端工程化环境中使用最为广泛的构建工具,它的作用是把比较新的前端技术和文件模块,编译打包成浏览器能够识别、并且能够尽可能兼容主流浏览器的代码(HTML、CSS、ES5),它就是一个打包器。(一切皆模块) + 安装webpack * webpack 是核心库,它提供了很多 API,可以用于编程 * webpack-cli 是命令行工具,它提供了一些很好用的命令行 入口 出口 loader 插件---在GitHub下多如牛毛 ``` cnpm install webpack -g cnpm install webpack-cli -g cnpm install webpack -D cnpm install webpack-cli -D ``` webpack --- webpack的核心库里面有api提供编程 webpack-cli --- webpack-cli是命令行工具提供script命令 # 三、项目初始化实现打包功能 + 创建react-xxl项目文件夹 + 执行npm init得到package.json文件 + 创建public静态资源文件夹,在里面创建index.html文件 + 创建src文件夹,在src文件夹下创建main.js入口文件 + 创建react.config.js文件,在其中配置文件 ``` const path =require('path'); module.exports ={ //入口,dirname是node.js的变量代表当前目录文件夹 // entry:path.resolve(__dirname,'./src/main.js'), entry:{ //给路口文件一个名字,叫app(可以使用绝对路径,也能使用相对路径) //app:path.resolve(__dirname, './src/main.js'), app:'./src/main.js' }, //出口 output:{ filename:'[name].[chunkhash].js',//把src下的js文件集合到这里 path:path.resolve(__dirname,'./dist'),//把文件打包输出到dist文件夹下,只能写绝对路径 publicpath:'qf',//可以给url添加前缀 }, } ``` + 配置package.json文件 //webpack-cli提供的命令行 //webpack打包时默认使用webpack.config.js文件,可以直接使用webpack webpack --config react.config.js ``` "build": "webpack --config react.config.js", ``` # 四、 开启服务器 1/执行npm start能把项目跑起来和有热更新功能 2/打包完自动插入index.html当中 + 安装开启服务所需的包 ``` npm install --save-dev webpack-dev-server //项目安装 npm install webpack-dev-server //全局安装 //webpack-dev-server是使用express来编写用于创建本地node.js本地服务器的包 ``` webpack-dev-serve --config react-config.js //这是旧版本的不可以,坑! webpack serve --config react.config.js //命令行 "start": "webpack serve --config react.config.js" + 配置react.config.js文件 + 理解配置文件 ``` module.exports ={ devServer: { open:true, port:8888, contentBase: './public'//指定本地服务的静态资源目录 }, } ``` # 五、 让public文件夹和src文件夹建立联系 ``` npm install --save-dev html-webpack-plugin ``` ``` //把打包后的js/css等资源,自动插入到public/index.html中(小功能html中的title)(开发环境下css/js也会插入到index.html中) const HtmlWebpackPlugin = require('html-webpack-plugin') //index.html也打包到dist文件夹下 module.exports = { plugins:[ new HtmlWebpackPlugin({ template: path.resolve(__dirname, 'public/index.html'), //<%= htmlWebpackPlugin.options.title %>更改index的title title: '2009' }), ] } ``` # 六、自动删除dist文件夹下的打包文件 ``` npm install clean-webpack-plugin --save-dev ``` ``` // 在每次执行npm run build时,自动帮我们清理掉dist(中文文档没有更新) const { CleanWebpackPlugin } = require('clean-webpack-plugin') module.exports ={ plugins:[ new CleanWebpackPlugin() ], } ``` # 七、热更新功能 + 现在不用配置都可以实现热更新,但是如果层级太多就不能实现热更新,所以需要以下配置 ``` 这是中文文档(旧,已经被弃用了) //引入webpack核心库 const webpack = require('webpack'); module.exports ={ devServer:{ hot:true //启用本地node服务中的socket长连接来实时通信 }, plugins:{ //HMR(hot Module Replacement)功能 new webpack.NamedModulesPlugin(), new webpack.HotModuleReplacementPlugin() } } ``` ``` //英文文档 模块热替换HRM module.exports ={ devServer:{ hot:true //启用本地node服务中的socket长连接来实时通信 }, } ``` # 八、使用css-loaders,scss-loader,file-loader + 配置css,sass文件,在webpack中一切皆模块,在main.js文件中可以使用import引入sass,css文件 ``` //为了从 JavaScript 模块中 import 一个 CSS 文件,需要安装style-loader和css-loader,然后再配置规则 npm install --save-dev style-loader css-loader //为了从 JavaScript 模块中 import 一个 saSS 文件,需要安装node-sass,sass-loader,style-loader和css-loader npm install --save-dev style-loader css-loader npm install node-sass -D npm install sass-loader -D //注意node-sass和node.js的版本问题 module.exports ={ module:{ //Webpack要根据你定义的规则,来编译各种不同后缀的模块 rules:[ // node-sass是sass编译器,它的作用是把sass-loader加载进来的scss文件编译成css文件。 { test: /\.(css|scss)$/, use: ['style-loader', 'css-loader','sass-loader'] }, ] } } ``` + 配置图片img,在js文件中可以用import引入assets里面的图片 ``` npm install --save-dev file-loader // file-loader的作用,是专门用于加载图片资源的。 //在main.js中引入图片 import pikaqiu from './assets/pikaqiu.jpg' ``` ``` // 配置react.config.js文件 module:{ //Webpack要根据你定义的规则,来编译各种不同后缀的模块 rules:[ { test: /\.(png|svg|jpg|gif)$/, use: ['file-loader'] }, ] } ``` # 九、bable使用bable-loader //在webpack中的bable-loader中安装使用bable,babel是js的编译器 + 配置bable,js文件能编译成浏览器兼容的es5代码,是javascript语法编辑器,转化成浏览器能兼容的ES5语法 ``` npm install bable-loader -D //用于加载js文件交给@babel/系列的编译器 npm install @babel/core -D //babel的核心库 npm install @babel/preset-env -D //用于编译大多数的ES6语法编译成主流浏览器能识别的ES5代码 ``` ``` //配置react.config.js文件 module:{ //Webpack要根据你定义的规则,来编译各种不同后缀的模块 rules:[ // babel-loader用于加载.js文件,并交给 @babel/* 编译器 // 在处理js模块时,为了让编译速度更快,一定要忽略掉 node_modules // 要让 babel生效,在项目根目录,还要添加 babel.config.js 配置文件 {text:/\.(js|jsx)$/,use:['bable-loader'],exclude:/node_modules/} ] } ``` ``` //配置babel.config.js文件 //要让 babel生效,在项目根目录,还要添加 babel.config.js 配置文件 module.exports ={ // preset 是Babel对不同版本的js语法的一种支持编译 // plugin 是用于某些特殊语法的支持与编译 // @babel/preset-env作用是把ES6编辑成主流浏览器能够兼容的ES5代码 'presets':["@babel/preset-env"] } ``` # 十、ESlint使用ESlint-loader 主要作用检测js语法规范 + 配置ESlint,当代码变化时,先检测代码规范,只有当代码满足规范时,才执行其它的。它的目标是提供一个插件化的javascript代码检测工具。 ``` npm install eslint --save-dev !!!失效了 npm install eslint-webpack-plugin --save-dev //配置.eslintrc.json文件,有6种文件格式,.js的优先级最高 { "parserOptions": { "ecmaVersion": 6, "sourceType": "module", "ecmaFeatures": { "jsx": true } }, "rules": { //0,1,2 //off,warn,error "semi": 0,//需要添加分号 "no-console":"off"//打印控制台会失败规则 } } //配置babel.config.js文件 const ESLintPlugin = require('eslint-webpack-plugin'); //ESlint-loader已经被抛弃了,Webpack最新的ESLint的使用方式, module.exports ={ plugins:[ //Webpack最新的ESLint的使用方式 new ESLintPlugin({ exclude: ['node_modules'] }) ], devServer: { // 当本地项目运行时,发生errors错误,以覆盖层的方式遮住视图 overlay:{ errors:true } } } //两种推荐的ESLint的关闭方式 /* eslint-disable */ console.log('disable eslint') // eslint-disable-line /* eslint-enable */ ``` # 十一、区别生产环境和开发环境 + react.config.js,无论是执行npm run build和npm start都是从这个文件开始的。 ``` npm install cross-env -D //一个很好用的包,nodejs进程里面添加环境变量,在启动环境中添加NODE_ENV环境变量 //配置package.json文件 "scripts": { "build": "cross-env NODE_ENV=production webpack --config react.config.js", "start": "cross-env NODE_ENV=development webpack serve --config react.config.js" }, ``` ``` //配置react.config.js //nodejs的内置变量process.env,专门用来存储环境变量的 const isDev =process.env.NODE_ENV==='development' const config ={ // 在这里写 生产环境的配置 } if(isDev){ //开发环境 } module.exports = config ``` # 十、配置@和可以省略文件后缀名 ``` //webpack上面的方法 module.exports={ resolve:{ alias:{ //添加@绝对路径 "@":path.resolve(__dirname,'src') }, //添加可以省略的文件后缀列表 extensions: ['.js', '.jsx', '.ts', '.json', '.css', '.vue'] }, //一个可以让我们精准定位错误的代码的字符devtool!!! config.devtool="source-map" } ``` # 十一、react实现Hello React + 安装react包 ``` npm install react -S npm install react-dom -S npm install @babel/preset-react -D //需要在babel.config.js中配置 ``` + 在loaders的规则中添加/\.(js|jsx)$/,Webpack要根据你定义的规则,来编译各种不同后缀的模块。 babel会决定交给@babel/preset-react还是@babel/preset-env来编译 ``` //在App.js中 import React from 'react' const ele =

Hello react2009函数式组件

//类组件 // class App extends React.Component{ // render(){ // return ele // } // } //函数式组件 function App(){ return ele } export default App ``` ``` //在main.js中 import React from 'react' import ReactDOM from 'react-dom' import App from './App' // render的第一个参数必须是一个 React组件 // 第二个参数是真实的DOM节点 ReactDOM.render(, document.getElementById('root')) ```