React学习之路react

react学习第一天笔记

2018-12-25  本文已影响0人  果木山

webpack运行项目知识

项目初始化

配置文件分析

项目结构

解决问题

项目开发总结

  1. 把项目变成git可以管理的仓库,同时,初始化项目
    • git init
    • npm init --y
  2. 当前项目文件的创建
    • .gitignore:忽略给github上传哪些文件;
    • .babelrc:编译:把不兼容的编译成兼容的;
    • webpack.config.js:webpack的配置;
    • README.md:当前项目的说明文件;
    • src文件夹:目录下创建
      • component文件夹,存放自定义的模块组件;
      • index.html
      • index.js
  3. 安装必要的插件
    • babel
      • npm i --save-dev
        • babel-core: 工具
        • babel-cli: 工具
        • babel-loader:运行JS,注:下载版本为7.1.5,最新版本会报错;代码:npm i --save-dev babel-loader@7.1.5
        • css-loader:运行css
        • style-loader:运行css
        • babel-preset-es2015: 编译e``s6,让es6语法编译成es
        • babel-preset-stage-0: 支持箭头函数:保证this指向
        • babel-preset-react: 支持react;
    • webpack
      • npm i --save-dev
        • webpack: 本地运行; =》dist目录可以看到
        • webpack-dev-server: 服务器运行; =》 dist文件夹下无文件;
        • webpack-cli
    • react:
      • npm i --save
        • react
        • react-dom
    • html模板插件
      • npm i --save-dev html-webpack-plugin;
  4. 配置文件:三大类
    • .babelrc
      • 代码:
       {
         "presets":["es2015","react","stage-0"],
         "plugins":[]
       }
      
    • webpack.config.js
      • 注意:在开发阶段,先不要压缩;上线再压缩;
      • 若生成的bundle.js为压缩文件,在build或start中设置--mode production
       const webpack=require("webpack");
       const HtmlWebpackPlugin=require("html-webpack-plugin");
       const ExtractTextPlugin = require("extract-text-webpack-plugin");
       const path=require("path");
       
       module.exports={
           //入口文件:index.js
           entry:path.resolve(__dirname,"./src/index.js"),//"./"可以省略
           //输出的位置
           output:{
               path:path.resolve(__dirname,"dist"),
               filename:"bundle.js"
           },
           //配置
           module:{
               rules:[
                   {//配置JS
                       test:/\.js(x)?$/,
                       use:"babel-loader",
                       exclude:/node_modules/
                   },
                   {//配置css
                       test: /\.css$/,
                       use: ExtractTextPlugin.extract({
                           fallback: "style-loader",
                           use: "css-loader"
                       })
                   }
               ]
           },
           devServer: {
               disableHostCheck: true, //  新增该配置项,防止浏览器控制台报错;
           },
           //插件
           plugins:[
               new ExtractTextPlugin("styles.css"),//styles.css是合并后的样式名;
               new HtmlWebpackPlugin({template:"./src/index.html"})
           ],
           //模型
           mode:"development"//还可以设置none,但是不能设置production,否则会提示警告;
       };
      
    • package.json:配置scripts文件
     "script":{
         "start":"webpack-dev-server --progress(进度条) --colors(颜色变化) --content-base dist(依赖的最基本的目录)",
         "build":"webpack --progress --colors"
      }
    
  5. 写一些react的测试文件
    • 自己封装的组件,都放在component文件夹下;
    • 把封装好的组件,导入到index.js文件中;
    • index.js是入口文件,会被编译打包压缩到bundle.js;
    • bundle.js会被自动插入到index.html文件;
    • index.html会在服务器下,自动被渲染;
  6. react的基本语法
    • 导入文件:import ... from ".."
     import React from "react";
     import ReactDom from "react-dom";
    
    • react的写法,用es6的继承
     //es6语法引入模块
     import React from "react";
     //引入自己的css样式
     import "./footer.css"
     class Footer extends React.Component{
         render(){
             return (
                 <div id="footer">
                     {/*我是注释*/}
                     <h1>我是底部标签</h1>
                 </div>
             )
         }
     }
     export default Footer;
    
    • 导出:export default Footer;

react的基础知识

webpack运行过程中踩过的坑

知识点

代码

 {
   "presets":["es2015","react","stage-0"],
   "plugins":[]
 }
 /node_modules/
 const webpack=require("webpack");
 const HtmlWebpackPlugin=require("html-webpack-plugin");
 const ExtractTextPlugin = require("extract-text-webpack-plugin");
 const path=require("path");
 
 module.exports={
     //入口文件:index.js
     entry:path.resolve(__dirname,"./src/index.js"),//"./"可以省略
     //输出的位置
     output:{
         path:path.resolve(__dirname,"dist"),
         filename:"bundle.js"
     },
     //配置
     module:{
         rules:[
             {//配置JS
                 test:/\.js(x)?$/,
                 use:"babel-loader",
                 exclude:/node_modules/
             },
             {
                 test: /\.css$/,
                 use: ExtractTextPlugin.extract({
                     fallback: "style-loader",
                     use: "css-loader"
                 })
             }
         ]
     },
     devServer: {
         disableHostCheck: true, //  新增该配置项
     },
     //插件
     plugins:[
         new ExtractTextPlugin("styles.css"),//styles.css是合并后的样式名;
         new HtmlWebpackPlugin({template:"./src/index.html"})
     ],
     //模型
     mode:"development"//还可以设置none,但是不能设置production,否则会提示警告;
 };
 //es6语法引入模块
 import React from "react";
 import "./header.css";
 
 class Header extends React.Component{
     constructor(){
         super();
         //设置初始状态;
         this.state={
             login:false
         }
     }
     //render为一个函数,类原型上的公有属性方法;
     render(){
         //登录之后,显示欢迎谁,没登录,先登录;
         let str="";
         if(this.state.login){
             str="欢迎你,guobin";
         }else{
             str="没登录,先登录"
         }
         setTimeout(()=>{
             //利用定时器,重新设置state;注意this指向;
             this.setState({
                 login:true
             })
         },3000);
         return (
             <div id="header">
                 {/*我是注释*/}
                 <h1>{str}</h1>
                 {/*子组件通过props拿到父组件传递的数据*/}
                 <p>{this.props.content}</p>
             </div>
         )
     }
 }
 export default Header;
 import React from "react";
 import ReactDom from "react-dom";
 
 import Header from "./component/Header/Header";
 import Footer from "./component/Footer/Footer";
 
 //引入css文件,公共样式,所有组件都可以设置
 import "./css/index.css";
 
 //设置数据
 var data=[
     {title:"我是111"},
     {title:"我是222"},
     {title:"我是333"}
 ];
 class Index extends React.Component{
     render(){
         return(
             <div>
                 {/*父组件给子组件传递数据,设置属性*/}
                 <Header content={data[1].title}/>
                 <Footer/>
             </div>
         )
     }
 }
 //最后要把Header直接渲染到页面上去;
 ReactDom.render(<Index/>,document.getElementById("app"));
 <!doctype html>
 <html lang="en">
 <head>
     <meta charset="UTF-8">
     <title>页面</title>
 <link href="styles.css" rel="stylesheet"></head>
 <body>
 <div id="app"></div>
 <script type="text/javascript" src="bundle.js"></script></body>
 </html>
 {
   "name": "day1",
   "version": "1.0.0",
   "description": "",
   "main": "index.js",
   "scripts": {
     "test": "echo \"Error: no test specified\" && exit 1",
     "start": "webpack-dev-server --progress --colors --content-base dist",
     "build": "webpack --progress --colors"
   },
   "keywords": [],
   "author": "guomushan",
   "license": "ISC",
   "devDependencies": {
     "babel-cli": "^6.26.0",
     "babel-core": "^6.26.3",
     "babel-loader": "^7.1.5",
     "babel-preset-es2015": "^6.24.1",
     "babel-preset-react": "^6.24.1",
     "babel-preset-stage-0": "^6.24.1",
     "css-loader": "^2.0.2",
     "extract-text-webpack-plugin": "^4.0.0-beta.0",
     "html-webpack-plugin": "^3.2.0",
     "style-loader": "^0.23.1",
     "webpack": "^4.28.2",
     "webpack-cli": "^3.1.2",
     "webpack-dev-server": "^3.1.13"
   },
   "dependencies": {
     "react": "^16.7.0",
     "react-dom": "^16.7.0"
   }
 }
上一篇 下一篇

猜你喜欢

热点阅读