# react_sdz_cli **Repository Path**: alun_sdz/react_sdz_cli ## Basic Information - **Project Name**: react_sdz_cli - **Description**: react脚手架搭建 - **Primary Language**: JavaScript - **License**: Not specified - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 2 - **Forks**: 1 - **Created**: 2019-02-14 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # react_sdz_cli ## 介绍 react脚手架搭建 从头开始搭建 React, Webpack4, Babel7, webpack-dev-server, react-router 工程 ## 目录: 你将会学习到的知识 建立项目 配置webpack 配置Babel 编写React组件 HTML webpack plugin webpack dev server 总结 ### 你将会学习到的知识 如何安装及配置webpack 如何安装及配置Babel 如何安装React 如何编写React组件 如何在HTML页面中引入打包文件 如何安装及配置webpack dev server ### 建立项目 首先,创建工程目录: mkdir webpack-react-tutorial && cd $_ 创建工程的基础目录结构: mkdir -p src 初始化项目: ### start项目 npm init -y ### 配置webpack webpack是一款非常强大的工具,学习webpack不仅可以用于搭建React项目,它适用于任何前端工程。 webpack提取原始的React组件,用于生成(几乎)每个浏览器都能理解的JavaScript代码。 #### 安装webpack: ``` $ npm i webpack --save-dev ``` 同时需要安装webpack-cli: ``` $ npm i webpack-cli --save-dev ``` 下一步,在package.json中添加webpack命令: ``` "scripts": { "build": "webpack --mode production" } ``` 现在不需要为webpack定义配置文件。 老版本的webpack不会自动查找配置文件,但从webpack4开始,不需要配置文件就可以直接进行开发。 接下来我将安装并配置Babel来编译我们的代码。 ### 配置Babel React组件大多是由ES6语法编写。ES6是对语法的一次很好的改进,但老版本浏览器往往不能解析新的ES6语法。有状态的React组件被生命为class,因此,为了让ES6在旧版浏览器中运行,我们需要进行某种转换。我们把这种转换成为编译。 webpack并不知道如何将ES6语法转换为ES5,不过webpack可以使用loader来完成。即webpack加载器将一些东西作为输入,并将其转换为其他东西输出。 webpack中的babel-loader便担任着将ES6语法转换为浏览器所能理解语法的工作。 ``` babel-preset-env //负责将ES6语法转换成ES5 babel-loader -D //安装babel-loader babel-core -D //安装babel核心 babel-preset-es2015 -D //支持ES2015 babel-preset-react -D //支持jsx babel-preset-stage-0 -D //支持ES7 babel-eslint -D //eslint配置 ``` 安装依赖: ``` $ npm i @babel/core babel-loader abel-preset-stage-0 @babel/preset-env @babel/preset-react --save-dev ``` 不要忘记配置Babel。在工程根目录下创建.babelrc文件,配置如下: ``` { "presets": ["@babel/preset-env", "@babel/preset-react"] } ``` ### webpack文件配置 创建webpack.config.js文件,配置如下: ``` module.exports = { module: { rules: [ { test: /\.(js|jsx)$/, exclude: /node_modules/, use: { loader: "babel-loader" } } ] } }; ``` 对于每个带有js或jsx扩展名的文件,Webpack通过babel-loader管理代码,将ES6转换为ES5。 有了这个,我们就可以编写React组件了。 webpack默认的入口文件为./src/index.js ### 编写React组件 首先按照Container/Presentation原则,创建两个React组件。 容器组件是承载所有逻辑的组件:用于处理状态更改的函数,内部组件状态等。 相反,展示组件仅用于展示。 展示组件是普通的JavaScript函数,它从容器组件接收数据作为props。 下面,我将构建一个简单的带文本框的React表单。 编写代码之前,需要安装React: ``` $ npm i react react-dom --save-dev ``` 接着,创建组件的目录结构: mkdir -p src/js/components/{container,presentational} 下面我们创建容器组件,需满足以下条件: 有自己的state 渲染出来是一个HTML表单 创建组件: touch src/js/components/container/FormContainer.jsx 代码如下: ``` import React, { Component } from "react"; import ReactDOM from "react-dom"; class FormContainer extends Component { constructor() { super(); this.state = { title: "" }; } render() { return (
); } } export default FormContainer; ``` 这个组件目前没有完成任何工作,它只是一个用于包含子组件的框架。 下面创建子组件: touch src/js/components/presentational/Input.jsx 我们的展示组件是一个文本框。一个HTML文本框拥有以下属性: type class id value required 所有的这些属性都应该由父容器组件传入子组件。 如果input拥有自己的state,在使用时一定要注意,确保HTML input是一个受控的React组件。 安装如下依赖: ``` $ npm i prop-types --save-dev ``` 回到React组件,展示组建代码如下: ``` import React from "react"; import PropTypes from "prop-types"; const Input = ({ label, text, type, id, value, handleChange }) => (Create a new article