react(一)

来源:互联网 发布:mac flash过期 编辑:程序博客网 时间:2024/05/23 07:25

一、简介

React 是一个用于构建用户界面的JAVASCRIPT 库。

React主要用于构建UI,很多人认为 React 是 MVC 中的 V(视图)。

React 起源于 Facebook 的内部项目,用来架设Instagram 的网站,并于 2013 年 5 月开源。

React 拥有较高的性能,代码逻辑非常简单,越来越多的人已开始关注和使用它。

二、特点

1.声明式设计 −React采用声明范式,可以轻松描述应用。

2.高效 −React通过对DOM的模拟,最大限度地减少与DOM的交互。

3.灵活 −React可以与已知的库或框架很好地配合。

4.JSX − JSX 是 JavaScript 语法的扩展。React 开发不一定使用 JSX ,但我们建议使它。

5.组件 − 通过 React 构建组件,使得代码更加容易得到复用,能够很好的应用在大项目的开发中。

6.单向响应的数据流 − React实现了单向响应的数据流,从而减少了重复代码,这也是它为什么比传统数据绑定更简单。

三、hello world程序

<!DOCTYPE html>

<html>

 <head>

   <meta charset="UTF-8" />

   <title>Hello React!</title>

   <scriptsrc="http://static.runoob.com/assets/react/react-0.14.7/build/react.min.js"></script>

   <script src="http://static.runoob.com/assets/react/react-0.14.7/build/react-dom.min.js"></script>

   <scriptsrc="http://static.runoob.com/assets/react/browser.min.js"></script>

 </head>

 <body>

   <div id="example"></div>

   <script type="text/babel">

     ReactDOM.render(

       <h1>Hello, world!</h1>,

       document.getElementById('example')

     );

   </script>

 </body>

</html>

实例中我们引入了三个库: react.min.js 、react-dom.min.js 和 browser.min.js:

react.min.js - React 的核心库

react-dom.min.js - 提供与 DOM 相关的功能

browser.min.js - 用于将 JSX 语法转为JavaScript 语法

ReactDOM.render(

         <h1>Hello,world!</h1>,

         document.getElementById('example')

);

以上代码将一个 h1 标题,插入 id="example" 节点中。

注意:

如果我们需要使用 JSX,则 <script> 标签的 type 属性需要设置为 text/babel

四、通过 npm 使用 React

建议在 React 中使用 CommonJS 模块系统,比如 browserify 或 webpack,本教程使用 webpack。

第一步、安装全局包

$ npm install babel -g

$ npm install webpack -g

$ npm install webpack-dev-server --save-dev   # 或者  npm install webpack -g

第二步、创建根目录

创建一个根目录,目录名为:reactApp,再使用 npm init 初始化,生成 package.json 文件:

$ mkdir reactApp

$ cd reactApp/

$ npm init

name: (reactApp) runoob-react-test

version: (1.0.0)

description: 菜鸟教程 react 测试

entry point: (index.js)

test command:

git repository:

keywords:

author:

license: (ISC)

About to write to /Users/tianqixin/www/reactApp/package.json:

 

{

  "name":"runoob-react-test",

  "version":"1.0.0",

  "description":"菜鸟教程 react 测试",

  "main":"index.js",

  "scripts":{

    "test":"echo \"Error: no test specified\" && exit 1"

  },

  "author":"",

  "license":"ISC"

}

 

 

Is this ok? (yes)

第三步、添加依赖包及插件

因为我们要使用 React, 所以我们需要先安装它,--save 命令用于将包添加至 package.json 文件。

$ npm install react --save

$ npm install react-dom --save

同时我们也要安装一些 babel 插件

$ npm install babel-core

$ npm install babel-loader

$ npm install babel-preset-react

$ npm install babel-preset-es2015

第四步、创建文件

接下来我们创建一些必要文件:

$ touch index.html

$ touch App.jsx

$ touch main.js

$ touch webpack.config.js

第五步、设置编译器,服务器,载入器

打开 webpack.config.js 文件添加以下代码:

 varconfig = {

  entry: './main.js',

        

  output: {

     path:'./',

     filename: 'index.js',

   },

        

  devServer: {

     inline: true,

     port: 7777

   },

        

   module:{

     loaders: [ {

        test: /\.jsx?$/,

        exclude: /node_modules/,

        loader: 'babel',

                           

        query: {

           presets: ['es2015', 'react']

        }

     }]

   }

        

}

 

module.exports = config;

entry: 指定打包的入口文件 main.js。

output:配置打包结果,path定义了输出的文件夹,filename则定义了打包结果文件的名称。

devServer:设置服务器端口号为 7777,端口后你可以自己设定 。

module:定义了对模块的处理逻辑,这里可以用loaders定义了一系列的加载器,以及一些正则。当需要加载的文件匹配test的正则时,就会调用后面的loader对文件进行处理,这正是webpack强大的原因。

现在打开 package.json 文件,找到 "scripts" 中的 "test""echo \"Error: no test specified\" && exit 1" 使用以下代码替换:

"start": "webpack-dev-server--hot"

替换后的 package.json 文件 内容如下:

$ cat package.json

{

  "name":"runoob-react-test",

  "version":"1.0.0",

  "description":"菜鸟教程 react 测试",

  "main":"index.js",

  "scripts":{

         "start":"webpack-dev-server --hot"

  },

  "author":"",

  "license":"ISC",

  "dependencies":{

    "react":"^0.14.7",

    "react-dom":"^0.14.7"

  }

}

现在我们可以使用 npm start 命令来启动服务。--hot 命令会在文件变化后重新载入,这样我们就不需要在代码修改后重新刷新浏览器就能看到变化。

第六步、index.html

设置 div id = "app" 为我们应用的根元素,并引入 index.js 脚本文件。

<!DOCTYPE html>

<html>

 

   <head>

     <meta charset = "UTF-8">

     <title>React App - 菜鸟教程(runoob.com)</title>

   </head>

 

   <body>

     <div id = "app"></div>

     <script src = "index.js"></script>

   </body>

 

</html>

第七步、App.jsx 和 main.js

这是第一个 react 组件。后面的章节我们会详细介绍 React 组件。这个组件将输出 Hello World!!!。

App.jsx 文件代码

import React from 'react';

 

class App extends React.Component {

  render() {

     return (

        <div>

           Hello World!!!<br />

            欢迎来到菜鸟教程学习!!!

        </div>

     );

   }

}

 

export default App;

我们需要引入组件并将其渲染到根元素 App 上,这样我们才可以在浏览器上看到它。

main.js 文件代码

import React from 'react';

import ReactDOM from 'react-dom';

 

import App from './App.jsx';

 

ReactDOM.render(<App />, document.getElementById('app'))

注意:

如果想要组件可以在任何的应用中使用,需要在创建后使用 export 将其导出,在使用组件的文件使用 import 将其导入。

第八步、运行服务

完成以上配置后,我们即可运行该服务:

$ npm start

通过浏览器访问 http://localhost:7777/,即可得到输出结果。

五、React JSX

React 使用 JSX 来替代常规的JavaScript。

JSX 是一个看起来很像 XML 的 JavaScript 语法扩展。

我们不需要一定使用 JSX,但它有以下优点:

JSX 执行更快,因为它在编译为JavaScript 代码后进行了优化。

它是类型安全的,在编译过程中就能发现错误。

使用 JSX 编写模板更加简单快速。

1、使用JSX

JSX 看起来类似 HTML ,我们可以看下实例:

ReactDOM.render(

         <h1>Hello,world!</h1>,

         document.getElementById('example')

);

我们可以在以上代码中嵌套多个 HTML 标签,需要使用一个 div 元素包裹它,实例中的 p 元素添加了自定义属性 data-myattribute添加自定义属性需要使用 data- 前缀

ReactDOM.render(

         <div>

         <h1>菜鸟教程</h1>

         <h2>欢迎学习 React</h2>

    <pdata-myattribute = "somevalue">这是一个很不错的 JavaScript 库!</p>

    </div>

         ,

         document.getElementById('example')

);

2、独立文件

你的 React JSX 代码可以放在一个独立文件上,例如我们创建一个 helloworld_react.js 文件,代码如下:

ReactDOM.render(

  <h1>Hello,world!</h1>,

 document.getElementById('example')

);

然后在 HTML 文件中引入该 JS 文件:

<body>

  <divid="example"></div>

<script type="text/babel" src="helloworld_react.js"></script>

</body>

3、JavaScript 表达式

我们可以在 JSX 中使用 JavaScript 表达式。表达式写在花括号 {} 中。实例如下:

ReactDOM.render(

         <div>

           <h1>{1+1}</h1>

         </div>

         ,

         document.getElementById('example')

);

在 JSX 中不能使用 if else 语句,但可以使用 conditional (三元运算) 表达式来替代。以下实例中如果变量 i 等于 1 浏览器将输出 true, 如果修改 i 的值,则会输出 false.

ReactDOM.render(

         <div>

           <h1>{i == 1 ? 'True!' : 'False'}</h1>

         </div>

         ,

         document.getElementById('example')

);

4、样式

React 推荐使用内联样式。我们可以使用 camelCase 语法来设置内联样式.React会在指定元素数字后自动添加 px 。以下实例演示了为 h1 元素添加 myStyle 内联样式:

var myStyle = {

         fontSize:100,

         color:'#FF0000'

};

ReactDOM.render(

         <h1style = {myStyle}>菜鸟教程</h1>,

         document.getElementById('example')

);

5、注释

注释需要写在花括号中,实例如下:

ReactDOM.render(

         <div>

    <h1>菜鸟教程</h1>

    {/*注释...*/}

        </div>,

         document.getElementById('example')

);

6、数组

JSX 允许在模板中插入数组,数组会自动展开所有成员:

var arr = [

  <h1>菜鸟教程</h1>,

  <h2>学的不仅是技术,更是梦想!</h2>,

];

ReactDOM.render(

  <div>{arr}</div>,

 document.getElementById('example')

);

7、HTML 标签 vs. React 组件

React 可以渲染 HTML 标签 (strings) 或 React 组件 (classes)。

要渲染 HTML 标签,只需在 JSX 里使用小写字母的标签名。

var myDivElement = <div className="foo"/>;

ReactDOM.render(myDivElement, document.getElementById('example'));

要渲染 React 组件,只需创建一个大写字母开头的本地变量。

var MyComponent = React.createClass({/*...*/});

var myElement = <MyComponentsomeProperty={true} />;

ReactDOM.render(myElement, document.getElementById('example'));

React 的 JSX 使用大、小写的约定来区分本地组件的类和 HTML 标签。

注意:

由于 JSX 就是 JavaScript,一些标识符像 class 和 for 不建议作为 XML 属性名。作为替代,React DOM 使用 className 和 htmlFor 来做对应的属性。

 

0 0
原创粉丝点击