前言 eg:代表代码对照
若文章有误,欢迎读者留言反馈
JSX语法 html文件中引入 1 2 3 <script src ="https://unpkg.com/react@16/umd/react.development.js" crossorigin > </script > <script src ="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin > </script >
挂载点
ReactDOM.render
react代码 ReactDOM.render 这个是react-dom提供的方法,render把模板变成虚拟dom
参数1 类似于document.createElement(标签名,属性值,内容)
参数2 指定挂载点 把节点挂载到当前div#app下面
eg1: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta http-equiv ="X-UA-Compatible" content ="IE=edge" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <title > Document</title > <script src ="https://unpkg.com/react@16/umd/react.development.js" crossorigin > </script > <script src ="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin > </script > </head > <body > <div id ="app" > </div > <script > ReactDOM.render( React.createElement('div' ,{},'我的第一个页面' ), document .querySelector('#app' ) ) </script > </body > </html >
引入babel,jsx模板语法
在script
标签内指定type
类型type="text/babel"
eg2: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta http-equiv ="X-UA-Compatible" content ="IE=edge" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <title > Document</title > <script src ="https://unpkg.com/react@16/umd/react.development.js" crossorigin > </script > <script src ="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin > </script > <script src ="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js" > </script > </head > <body > <div id ="app" > </div > <script type ="text/babel" > var vdom = <div > <h3 > hello wrod</h3 > <div > 我是内容部分</div > </div > ReactDOM.render( vdom, document .querySelector('#app' ) ) </script > </body > </html >
React插值表达式
语法:{}
注释:jsx中添加注释,需要包裹{},同时只能使用/ 注释内容 /,而不是双斜杠//
类似vue
,{}里面支持放数据、变量、表达式(&& || !等)、函数调用【注意最终的落脚点都是一个具体的值】
花括号里面的数组默认会被遍历渲染【jsx中如果是一维数组,直接写上就可以遍历渲染了,但是会报警告,得加上key】
1 2 3 4 5 6 7 8 9 10 { } {} { [ <h2 key ={1} > aa</h2 > , <h2 key ={2} > bb</h2 > ] } {} { <h1 > hello world</h1 > }
eg3: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta http-equiv ="X-UA-Compatible" content ="IE=edge" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <title > Document</title > <script src ="https://unpkg.com/react@16/umd/react.development.js" crossorigin > </script > <script src ="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin > </script > <script src ="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js" > </script > </head > <body > <div id ="app" > </div > <script type ="text/babel" > var w = 'word' var b = false var vdom = <div > hello { b ? 'word':'hello' }</div > ReactDOM.render( vdom, document .querySelector('#app' ) ) </script > </body > </html >
动态属性
eg4: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta http-equiv ="X-UA-Compatible" content ="IE=edge" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <title > Document</title > <script src ="https://unpkg.com/react@16/umd/react.development.js" crossorigin > </script > <script src ="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin > </script > <script src ="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js" > </script > <style > .hello { color :red; } </style > </head > <body > <div id ="app" > </div > <script type ="text/babel" > var a = 'hello' var vdom = <div className ={ hello }> hello </div > ReactDOM.render( vdom, document .querySelector('#app' ) ) </script > </body > </html >
React样式写法、插入html
class绑定单个属性值
className={ title } 变量title: ‘title’
dangerouslySetInnerHTML 解析并插入标签,类似innerHTML、vue的v-html
插值中,加引号是字符串,不加是引号就是变量
[补充:有些标签自带的属性可以直接写,如表格自带的属性有的需要大括号有的需要引号,注意一下就行]
class不做动态绑定处理[下面这个title就是普通类名]var vdom = <div className="title">hello world</div>
class绑定单个值var title = 'title'
var vdom = <div className={ title }>hello world</div>
class绑定多个值 使用变量var styles = ['title', 'bg']
var vdom = <div className={ styles.join(' ') }>hello world</div>
不使用变量var vdom = <div className={ 'title bg' }>hello world</div>
style行内样式 直接写在{}var fon = '12px'
var vdom = <div style={{color:'red',fontSize:fon}}>hello</div>
使用变量var s = {color:'red',fontSize:'12px'}
var vdom = <div style={ s }>hello</div>
dangerouslySetInnerHTML react用来解析字符串,并识别标签 v-html1 2 3 4 5 var vdom = <div > hello,<p dangerouslySetInnerHTML ={{__html: '<a href ="http:www.baidu.com" > 百度一下</a > '}}></p > </div > ReactDOM.render( vdom, document .querySelector('#app' ) )
eg5: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta http-equiv ="X-UA-Compatible" content ="IE=edge" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <title > Document</title > <script src ="https://unpkg.com/react@16/umd/react.development.js" crossorigin > </script > <script src ="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin > </script > <script src ="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js" > </script > <style > .title { color :red; } .bg { font-size : 12px ; } </style > </head > <body > <div id ="app" > </div > <script type ="text/babel" > /* react样式写法 + class绑定单个属性值 => className={ title } 变量title:'title' + dangerouslySetInnerHTML 解析并插入标签 + 插值中,加引号是字符串,没加引号的变量。 */ // var title = 'title' var vdom = <div className ='title' > hello</div > // 1.class绑定单个值 // var vdom = <div className ={ title }> hello</div > // 2.class绑定多个值 var styles = ['title','bg'] // var vdom = <div className ={ styles.join (' ') }> hello</div > // var vdom = <div className ={ 'title bg '}> hello</div > // 3.三元 var b = false // var vdom = <div className ={ b ? 'title ': '' }> hello</div > // 4.style行内样式 var fon = '12px' // var vdom = <div style = {{color: 'red' ,fontSize:fon}} > hello</div > // var s = {color:'red',fontSize:'12px'} // var vdom = <div style ={ s }> hello</div > // dangerouslySetInnerHTML react用来解析字符串,并识别标签 v-html // 了解下,容易被xss攻击 // var vdom = <div > hello,<p dangerouslySetInnerHTML = {{__html: '<a href="http:www.baidu.com">百度一下</a>' }} > </p > </div > ReactDOM.render( vdom, document.querySelector('#app') ) </script > </body > </html >
数组遍历
React数组遍历
回顾vue,v-for=”(item, index) in arr” :key=”item.id”
jsx,arr.map((item, index) => { item.name } )
eg6: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta http-equiv ="X-UA-Compatible" content ="IE=edge" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <title > Document</title > <script src ="https://unpkg.com/react@16/umd/react.development.js" crossorigin > </script > <script src ="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin > </script > <script src ="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js" > </script > <style > .title { color :red; } .bg { font-size : 12px ; } </style > </head > <body > <div id ="app" > </div > <script type ="text/babel" > var arr = ['小明' ,'小红' ,'小黑' ] var vdom = <div > <ul > {/* 注意:jsx中添加注释,需要包裹{},数组有多少个元素,我们应该是有多个li标签 */} { arr.map((item,index)=>{ return <li key ={ index }> { item }</li > }) } </ul > </div > ReactDOM.render( vdom, document .querySelector('#app' ) ) </script > </body > </html >
对象遍历
React对象遍历
回顾vue,v-for=”(val,key,index) in obj” :key=”key”
jsx,Object.keys(obj).map((item,index) => 键名:{ item } ---- 键值:{ obj[item] } )
eg7: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 <!DOCTYPE html > <html lang ="en" > <head > <meta charset ="UTF-8" > <meta http-equiv ="X-UA-Compatible" content ="IE=edge" > <meta name ="viewport" content ="width=device-width, initial-scale=1.0" > <title > Document</title > <script src ="https://unpkg.com/react@16/umd/react.development.js" crossorigin > </script > <script src ="https://unpkg.com/react-dom@16/umd/react-dom.development.js" crossorigin > </script > <script src ="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js" > </script > <style > .title { color :red; } .bg { font-size : 12px ; } </style > </head > <body > <div id ="app" > </div > <script type ="text/babel" > var obj = { id :123 , name :'小明' , age :22 } var vdom = <div > <ul > { Object.keys(obj).map((item,index)=>{ return <li key ={ item }> 属性:{ item },属性值:{ obj[item] }</li > }) } </ul > </div > ReactDOM.render( vdom, document .querySelector('#app' ) ) </script > </body > </html >
后记[又出bug啦]: 在写完这篇笔记后我就急着要发布到我的个人博客上了,但是在生成(hexo g)这里居然报错了,这个错误大概就是React
的一些语法和我们渲染起了冲突,如双大括号,所以最好不管单行代码还是多行代码最好使用单反引号或三个反引号包裹住咱们的代码