后台小白前端入门--React前端框架搭建Demo及介绍

前期准备

1.安装Node Node 安装地址

2.通过NPM 全局安装Webpack。命令:npm install -g webpack

简易Demo搭建及说明

1.创建目录结构

创建如下目录:

目录说明:
build:用于存放经过webpack打包后的js文件
jsx:用于存放实际开发编写的jsx文件(即实际开发的js代码都写在这个目录下的文件中)

2.生成 package.json文件

在命令行输入 npm init 生成package.json文件,按照提示输入相关信息,生成文件如下:

 {
  "name": "frontdemo",
  "version": "1.0.0",
  "description": "front demo project",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "http:/xx.xx.xx"
  },
  "keywords": [
    "demo",
    "front"
  ],
  "author": "wuqke",
  "license": "ISC"
}

该文件是包依赖管理的描述性文件,用于管理项目中通过NPM安装的依赖。

生成package.json后目录结构如下:

3.创建webpack.config.js文件

在frontDemo下创建webpack.config.js,内容如下:

 module.exports = {
    entry: {
        index: './jsx/index.jsx',
    },
    output: {
        filename: './build/[name].js'
    },
    module: {
        loaders: [
            {
                test: /\.js[x]?$/,
                exclude: /node_modules/,
                loader: 'babel',
                query: {
                    presets: ["es2015", "react"]
                }
            },
        ]
    }
};

属性说明:
entry:需要通过webpack打包处理的入口文件
output:webpack打包处理后输出的文件位置和名称。结合上面的例子,就是webpack在处理./jsx/index.jsx后,会在./build/目录下生成一个index.js([name]对应于entry中的key)的文件。

loaders:下面大致的意思是,从入口文件中引入的模块(通过require或者import),后缀为js或者jsx的文件都经过babel loader处理( node_modules的除外)。因为我们我们的代码是es6和jsx风格的代码,所以需要在query中使用es2015和react来进行转换。

4.创建html,jsx文件,并安装相关依赖

现在开始创建jsx,html文件。

1.在创建html的文件中加入刚刚webpack输出的js,index.html内容如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Front Demo</title>
    <meta charset="UTF-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge">
<body>
    <div id="main">
    </div>
    <script src="build/index.js" />
</body>
</html>

2.在jsx文件夹下创建index.jsx,添加内容如下(里面涉及到相关的React内容和es6语法,不熟悉的可以通过查阅参考文献进行相关的学习):

import React from 'react';
import ReactDOM from 'react-dom';

class MainContentComponent extends React.Component {
    constructor(props) {
        super(props);
        
    }

    render() {
        return (
            <div>
                hello,this is first demo
            </div>
        );
    }
}

ReactDOM.render(
    <MainContentComponent/>,
    document.getElementById('main')
);

因为这里引入了React和ReactDOM,所以我们需要通过npm来安装相关的依赖,使得webpack在打包处理的时候可以引用到这些依赖的模块,在package.json所在的目录下运行以下两条命令:

npm install react --save
npm install react-dom --save

这样,打开package.json,你就会看到如下内容:

{
  "name": "frontdemo",
  "version": "1.0.0",
  "description": "front demo project",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "http:/xx.xx.xx"
  },
  "keywords": [
    "demo",
    "front"
  ],
  "author": "wuqke",
  "license": "ISC",
+ "dependencies": {
+   "react": "^15.3.2",
+   "react-dom": "^15.3.2"
+ }
}

加号对应的行为新添加的内容,说明依赖的模块react,react-dom已经安装到该项目中了,注意,必须使用--save 才会将依赖的信息写到package.json中,自己独立开发的项目,不加--save写入到package.json也许不会出现错误,但是当别人下载你的项目开发就会发生错误。不过无论如何,自己开发还是团队项目,使用--save将依赖写入到依赖描述文件中,是更好的选择和习惯。

5.运行webpack,在build目录下生成目标js

此时,我们就可以在webpack.config.js所在的目录下运行webpack,来生成浏览器端js引擎可以识别的目标文件了,你只需要打命令webpack,webpack就会在该目录下找webpack.config.js,根据这个js下的文件来打包处理对应的文件了。输入命令后,你会发现有如下错误:

这是因为,webpack里面使用的loader,也是开发相关的依赖,也需要通过npm来安装到该项目中来,命令如下:

npm install webpack --save-dev
npm install babel-core --save-dev 
npm install babel-loader --save-dev 
npm install babel-preset-es2015 --save-dev
npm install babel-preset-react --save-dev

安装完后,package.json应多了如下内容:

{
  "name": "frontdemo",
  "version": "1.0.0",
  "description": "front demo project",
  "main": "index.js",
  "scripts": {
    "test": "echo \"Error: no test specified\" && exit 1"
  },
  "repository": {
    "type": "git",
    "url": "http:/xx.xx.xx"
  },
  "keywords": [
    "demo",
    "front"
  ],
  "author": "wuqke",
  "license": "ISC",
  "dependencies": {
    "react": "^15.3.2",
    "react-dom": "^15.3.2"
  },
+ "devDependencies": {
+   "babel-core": "^6.17.0",
+   "babel-loader": "^6.2.5",
+   "babel-preset-es2015": "^6.16.0",
+   "babel-preset-react": "^6.16.0",
+   "webpack": "^1.13.2"
+ }
}


上面在使用npm install时,添加的参数是--save-dev,而不是--save。因为我们这里加进来的依赖是属于开发中需要的依赖,实际项目运行并不需要这些依赖,所以将其放在devDependencies,加以区分,方便管理。

这时候,你再运行webpack,就会发现如下信息:

说明webpack已经成功输出目标js,此时目录结构如下:

build目录下,已经生成了index.js,在浏览器中打开index.html,如果在页面中看到如下字样:

hello,this is first demo

说明你已经成功使用webpack打包处理输出了目标文件。

在实际开发的时候,你或许在jsx文件中修改了某个字段,就想马上刷新浏览器,看到实际的效果,但是又不想重复输入命令webpack来打包处理,那你可以试试这个命令:

webpack --progress --colors --watch

该命令会启动一个常驻进程,实时监测jsx文件的变化并更新对应的目标文件。

6.使用React-Bootstrap

React-Bootstrap是Bootsrap项目使用React重写而成的中后台前端页面框架,非常适合迅速开发相关后台界面。话不多说,使用npm来将其安装到本项目中:

npm install react-bootstrap --save

在index.html中引入相关css文件,如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Front Demo</title>
    <meta charset="UTF-8"/>
    <meta http-equiv="X-UA-Compatible" content="IE=Edge">
 +  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/latest/css/bootstrap.min.css">
<body>
    <div id="main">
    </div>
    <script src="build/index.js" type="text/javascript"></script>
</body>
</html>


其实也可以像引入js那样在js代码中引入css,只需要在webpack中加入style-css loader即可,不过这里不再给出例子。

然后,查阅React-Bootstrap Components,将需要的组件引入并放在你想要它出现的位置即可,以Bootstrap 导航栏为例,修改index.jsx代码如下:


import React from 'react';
import ReactDOM from 'react-dom';
+import {Nav,Navbar,NavItem,NavDropdown,MenuItem} from 'react-bootstrap';

class MainContentComponent extends React.Component {
    constructor(props) {
        super(props);
        
    }

    render() {
        return (
-           <div>
-               hello,this is first demo
-           </div>
+           <Navbar inverse>
+               <Navbar.Header>
+                 <Navbar.Brand>
+                   <a href="#">React-Bootstrap</a>
+                 </Navbar.Brand>
+                 <Navbar.Toggle />
+               </Navbar.Header>
+               <Navbar.Collapse>
+                 <Nav>
+                   <NavItem eventKey={1} href="#">Link</NavItem>
+                   <NavItem eventKey={2} href="#">Link</NavItem>
+                   <NavDropdown eventKey={3} title="Dropdown" id="basic-nav-+dropdown">
+                     <MenuItem eventKey={3.1}>Action</MenuItem>
+                     <MenuItem eventKey={3.2}>Another action</MenuItem>
+                     <MenuItem eventKey={3.3}>Something else here</MenuItem>
+                     <MenuItem divider />
+                     <MenuItem eventKey={3.3}>Separated link</MenuItem>
+                   </NavDropdown>
+                 </Nav>
+                 <Nav pullRight>
+                   <NavItem eventKey={1} href="#">Link Right</NavItem>
+                   <NavItem eventKey={2} href="#">Link Right</NavItem>
+                 </Nav>
+               </Navbar.Collapse>
+           </Navbar>
        );
    }
}

ReactDOM.render(
    <MainContentComponent/>,
    document.getElementById('main')
);

在浏览器中打开页面,看到如下页面:


参考文献中包含了React,es6语法等技术框架的相关文献,有需要的可以参阅。

相关技术资料站

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,544评论 6 501
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,430评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,764评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,193评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,216评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,182评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,063评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,917评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,329评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,543评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,722评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,425评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,019评论 3 326
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,671评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,825评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,729评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,614评论 2 353

推荐阅读更多精彩内容