1.项目依赖

安装所需要依赖的其它第三方开源库,项目依赖如下:

  "dependencies": {
"babel-core": "^6.21.0",
"babel-loader": "^6.2.10",
"babel-preset-es2015": "^6.18.0",
"babel-preset-react": "^6.16.0",
"react": "^15.4.2",
"react-dom": "^15.4.2"
}

由于要使用到 import ,所以需要使用安装babel-preset-es2015,其它的几个库都是必须的;

2.配置webpack.config.js

module.exports = {
entry: __dirname + '/app.js',
output: {
path: __dirname,
filename: 'bundle.js'
},
module: {
loaders: [
{
test: /\.js$/,
exclude: /node_modules/,
loader: 'babel',
query: {
presets: ['es2015', 'react']
}
}
]
}
}

主要就是配置相应的loader,在此只需要 es2015 和 react;

3.创建资源文件

index.html

<html>
<head>HelloWorld</head>
<body>
<div id="helloworldDiv"></div>
<script type="text/javascript" src="bundle.js"></script>
</body>
</html>

该网页里面只有一个 id 为 helloworldDiv 的 div,和引用的一个外部 script 文件,该 script 文件由webpack打包工具生成,而并非手动添加;

app.js

import React from 'react';
import {render} from 'react-dom';
import ReactDom from 'react-dom';
// ReactDom.render(<h1>Hello World</h1>, document.getElementById('helloworldDiv'));
render(<h1>Hello World</h1>, document.getElementById('helloworldDiv'));

在app.js,记录了'两种'渲染方法,实际上是同一种渲染方法;

可以通过ReactDom.render,也可以直接调用render方法,需要注意的是此两种方法的区别:'ReactDom' 是直接导入的整个 'react-dom',而 'render' 则在使用 import 导入的时候,添加了 '{}' 进行修饰,{} 修饰的对象为某一个具体的已知的方法,而没有 {} 修饰的则为导入的整个 'react-dom' 即 ReactDom,也就是说 render 是ReactDom对象的一个方法;

通过调试发现 ReactDom 对象结构如下:

Object {
findDOMNode
render(nextElement, container, callback)
unmountComponentAtNode
unstable_batchedUpdates
...
}

正好印证了上面的断言;

4.Component

除了使用

render(<h1>Hello World</h1>, document.getElementById('helloworldDiv'));

这样直接渲染一段组织好的html片断之外,还可以以组件的形式来对html片断进行封装;

React 允许将代码封装成组件(component),然后像插入普通 HTML 标签一样,在网页中插入这个组件。有两种定义组件类的方法:

4.1 React.Component

class HelloWorld extends React.Component {
render() {
return (<div>Hello World</div>);
}
} render(<HelloWorld />, document.getElementById('testDiv'));

通过继承 React.Component ,新创建一个组件类HelloWorld,在使用的时候,直接将该组件传递给render函数的nextElement参数;

4.2 React.createClass

var HelloWorld = React.createClass({
render: function() {
return <h1>Hello World</h1>;
}
});

模板插入 <HelloWorld /> 时,会自动生成 HelloWorld 的一个实例。所有组件类都必须有自己的 render 方法,用于输出组件。
注意,组件类的第一个字母必须大写,否则会报错,比如HelloWorld不能写成helloWorld。另外,组件类render函数的返回只能包含一个顶层标签,否则也会报错。

4.3 无状态组件

创建组件除了上面两种方式外,还可以直接通过一个function来创建。

var React = require("react");

var MyButton = function(props) {
return <div>
<button onClick={props.onClick}>New Item</button>
</div>;
}; module.exports = MyButton; // 无状态组件定义方式

需要使用 require("react") 将 react导入!

5. production

生成bundle.js后提示: It looks like you're using a minified copy of the development build of React?...

修正方法:webpack 配置添加 webpack.DefinePlugin 插件,更改NODE_ENV

module.exports = {
//...
plugins:[
new webpack.DefinePlugin({
'process.env':{
'NODE_ENV': JSON.stringify('production')
}
}),
.......
})
]
//...
}

Webpack + React 开发 01 HelloWorld的更多相关文章

  1. 从零开始搭建webpack+react开发环境

    环境主要依赖版本 webpack@4.8.1 webpack-cli@2.1.3 webpack-dev-server@3.1.4 react@16.3.2 babel-core@6.26.3 bab ...

  2. 搭建 webpack + React 开发环境

    说在开头 上个月断断续续的在研究webpack的配置,但是很多网上的文章基本上都是只说了开发环境的配置,而忽略了生产环境的配置.大致研究了一下门路,然后就来写一篇随笔让自己能在以后能有个地方可以做参考 ...

  3. Webpack + React 开发 03 props

    React中组件的用法与原生的 HTML 标签完全一致,可以任意加入属性,比如 <HelloWorld name="John"> ,就是 HelloWorld 组件加入 ...

  4. Webpack + React 开发 02 JSX 语法

    HTML 语言直接写在 JavaScript 语言之中,不加任何引号,这就是 JSX 的语法,它允许 HTML 与 JavaScript 的混写: render(<h1>Hello Wor ...

  5. Webpack+React+ES6开发模式入门指南

    React无疑是今年最火的前端框架,github上的star直逼30,000,基于React的React Native的star也直逼20,000.有了React,组件化似乎不再步履蹒跚,有了Reac ...

  6. webpack+react+redux+es6开发模式---续

    一.前言 之前介绍了webpack+react+redux+es6开发模式 ,这个项目对于一个独立的功能节点来说是没有问题的.假如伴随着源源不断的需求,前段项目会涌现出更多的功能节点,需要独立部署运行 ...

  7. webpack+react+redux+es6开发模式

    一.预备知识 node, npm, react, redux, es6, webpack 二.学习资源 ECMAScript 6入门 React和Redux的连接react-redux Redux 入 ...

  8. webpack+react+es6开发模式

    一.前言 实习了两个月,把在公司用到的前端开发模式做个简单的整理.公司里前端开发模式webpack+react+redux+es6,这里去掉了redux. webpack, react, redux等 ...

  9. webpack配置React开发环境(上)

    Webpack 是一个前端资源加载/打包工具,我们部门的一条主要技术栈就是Webpack+React+ES6+node,虽然之前自己做个人项目也接触好多次Webpack,但是自己并没有研读总结过Web ...

随机推荐

  1. VirtualBox共享文件夹 Windows 7 (宿主机) + Ubuntu 12.04

    1 安装增强功能包1.1 运行Ubuntu并登陆,菜单“设备”->“安装增强功能包(Install Guest Additions)”ubun1.2 桌面上会多出一个光盘图标,光盘默认自动加载到 ...

  2. Sqlmap常用命令大全

    1 Options(选项) -h,--help 显示帮助消息-hh 显示详细帮助-version -v VERBOSE 详细级别 0-6 默认12 Target 目标-u URL--url=URL-g ...

  3. T&F 圆桌:儿童智能玩具离我们还有多远?

    “女人和孩子的钱是最好挣的”,这句经典的名句被很多商家奉为信条,这在现实生活中也得到了很好的印证. 各种步行街.商业街.Mall 干的做多的事情就是:围绕着女人和孩子打造创造消费点.步行街.商业街上各 ...

  4. JS特效@缓动框架封装及应用

    | 版权声明:本文为博主原创文章,未经博主允许不得转载. 一.变量CSS样式属性获取/赋值方法 给属性赋值:(既能获取又能赋值) 1)div.style.width 单个赋值:点语法,这个方法比较固定 ...

  5. 数据库——SQL数据定义

    数据定义  SQL的数据定义语句 操 作 对 象 操  作  方  式 创  建 删  除 修  改 表 CREATE TABLE DROP TABLE ALTER TABLE 视  图 CREATE ...

  6. H-ui框架制作选项卡

    本案例运用H-ui框架,写了一个选项卡案例 1. html代码(固定这样写,用一个div包裹控制条tabBar和内容条tabCon) <div id="tab-index-carteg ...

  7. sprint会议1

    昨天:进行第一次站立会议,讨论冲刺阶段,目标,任务认领,制作索引卡. 今天:准备查找安卓APP开发的有关资料,安装有关软件. 遇到的问题:对这方面毫无了解,不知道怎么开始,从哪开始,完全没经验.

  8. DocX插件

    DocX是一个用C#编写的.NET库,它允许开发人员以简单直观的方式操作Word文件.

  9. 【OSG】将显示的图形窗口化

    窗口化原理 有时为了方便控制场景渲染,需要设置一个合适的图形环境窗口(即窗口化). 创建图形环境的主要步骤如下: (1)通过WindowingSystemInterface类得到系统窗口接口,该系统接 ...

  10. json对象与json字符串的区别

    最近糟了这个坑,同一个方法,android和ios返回的数据不一样,一个是json字符串,另一个是json对象(至于为什么后台返回的是json对象,还没找到原因,但是我看到的后台的代码是有在返回之前给 ...