React不是一个完整的MVC框架,最多能够认为是MVC中的V(View),甚至React并不很是承认MVC开发模式javascript
减小对DOM进行操做,引入了虚拟DOM,如:先将节点内容从A-B,B-A,React会认为A变成B,而后又从B变成A ,不发生任何变化。html
虚拟DOMjava
组件系统node
单向数据流react
JSX 语法ajax
引入三个js文件:(react版本是15版本,可能和16版本的操做有部分差别)babel
react.js
react-dom.js
browser.jsapp
最简单的React操做:框架
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <script src="./react.min.js"></script> <script src="./react-dom.min.js"></script> <script src="./browser.min.js"></script> </head> <body> <div id="app"></div> <script type='text/babel'> //建立组件 var Hello = React.createClass({ render:function () { return ( //jsx语法 <div>HelloWorld</div> ) } }) //利用ReactDOM对象的render方法将组件渲染到某个节点里 ReactDOM.render(<Hello/>,app) </script> </body> </html>
JSX是一种语法,全称:javascript xmldom
用法:
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta http-equiv="X-UA-Compatible" content="ie=edge"> <title>Document</title> <script src="./react.min.js"></script> <script src="./react-dom.min.js"></script> <script src="./browser.min.js"></script> </head> <body> <div id="app1"></div> <script type='text/babel'> var World = React.createElement( 'h1', {className:'abc',id:'haha'}, [React.createElement('span',null,'Hello'), React.createElement('mark',null,'World')]) ReactDOM.render(World,app1) </script> </body> </html>
行内样式:
<div style = { {color:'red',fontSize:2+'em'} }>Hello world</div> //{ }的做用相似于Vue中的表达式符号
写在React.createClass中用this调用:
var Hello = React.createClass({ style:{ background:'lightgreen', color:'deepskyblue' }, render:function () { return ( //jsx语法 <div style={this.style}>HelloWorld</div> ) } })
<script type="text/babel"> var Hello = React.createClass({ clickHandler(){ console.log('HelloWorld'); }, render:function () { return ( <div> <div onClick={this.clickHandler}>Click</div> </div> ) } }) ReactDOM.render(<Hello/>,app) </script>
<script type="text/babel"> var Hello = React.createClass({ clickHandler(){ console.log('HelloWorld'); }, render:function () { return ( <div> <World/>//子元素 </div> ) } }) var World = React.createClass({ clickHandler(){ console.log('HelloWorld'); }, render:function () { return ( <div> <div onClick={this.clickHandler}>Click</div> </div> ) } }) ReactDOM.render(<Hello/>,app)
<script type="text/babel"> var Hello = React.createClass({ render:function () { return ( <div> <World>{{a:1,b:2}}</World> </div> ) } }) var World = React.createClass({ clickHandler(){ console.log(this.props); }, render:function () { return ( <div> <div onClick={this.clickHandler}>Click</div> </div> ) } }) ReactDOM.render(<Hello/>,app) </script>
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta http-equiv="X-UA-Compatible" content="ie=edge" /> <title>Document</title> <script src="./react.min.js"></script> <script src="./react-dom.min.js"></script> <script src="./browser.min.js"></script> <style> </style> </head> <body> <div id="app"></div> <script type="text/babel"> var Hello = React.createClass({ getInitialState(){//设置state的数据 return { name:'World' } }, render:function () { return ( <div> {this.state.name}{/*这里渲染了state的name*/} </div> ) } }) ReactDOM.render(<Hello/>,app) </script> </body> </html>