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>