JSX是JavaScript的语法扩展,它不是字符串,也不是HTML。JSX可以很好地描述UI交互的本质形式,它具备JavaScript的所有功能。JSX可以生成React“元素”。基本上使用\src\index.jsimportReactfrom'react'importReactDomfrom'react-dom'//看起来是HTML,其实是JSXconsttitle=
HelloReact
//调用ReactDom.render方法,传入jsx和nodes对象ReactDom.render(title,document.getElementById('root'))在使用JSX时可以按照HTML的规则简单直接使用(需要注意不是html),所以当有多行代码时,需要用Brackets()换行。importReactfrom'react'importReactDomfrom'react-dom'//用小括号包裹jsx,可以换行,代码更整洁consttitle=(HelloReact
嘿嘿嘿嘿嘿
)//JSX本身也是一个值,可以直接吃constApp=({/*注释是jsx里这么熊*/>
)ReactDOM.render(App,document.getElementById('root'));JSX本身就是一个表达式JSX添加属性:字符串属性,直接用双引号把动态属性包起来,不用双引号,直接用{}class={xxx}JSX添加子元素JSX只有一个每个父元素单标签必须关闭//01jsx本身就是一个表达式constnames=name
{/*这是显示的鸳鸯(原样)*/>{name}
{/*动态获取变量数据*/>{sayHello()}
{/*调用函数是否违法?否*/}{/*执行原生JS是否不合理?合理*/>{console.log('1111')}
{Math.random()}
{JSON.stringify(obj)}
{/*三元运算让你眼红?No*/>{flag?'登录状态':'执行登录'}
{/*模板字符下,strings和variables结婚了,有可能吗?是的*/>{`hello,${name}`}
{/*JSX也是可以直接吃的值*/>{title}
西陵老师
//02添加属性constage=99//03jsx添加子元素(JSX只有一个父元素)//04单个标签必须关闭//ComponentfunctionApp(){return(//返回中只能有一个JSX块////错误{/*jsx本身是一个表达式*/}{names}{/*添加属性*/>用户年龄属性{/*字符串属性*/>用户年龄属性{/*动态属性*/}{/*单标签必须关闭*/}{/*
*/}{/*报错*/}{/*单标签正确写法*/>![]()
);}exportdefaultApp;最后,JSX最好用小括号()包裹事件绑定事件处理函数和事件绑定//事件处理函数constevent1=function(){alert('HeyReact')}functionApp(){return(事件绑定
{/*事件名称使用驼峰方式命名,直接使用函数赋值,不是函数调用*/>事件绑定
{/*因为事件绑定需要接收函数本身作为事件处理,不能直接调用*/{/*因此需要使用箭头函数返回事件处理函数,而不是函数调用*/>{/*或者使用bind等方法将函数本身作为返回值传递*/>
事件绑定
{/*01函数没有传参*/}{/*默认传入事件对象,可以在事件处理函数中直接接收形参*/>{/*02箭头函数传递因为默认传入事件对象,所以在使用箭头函数时,需要在箭头函数中传递,然后在箭头函数返回的函数中传递*/>
{/*03bind等方法传入函数本身作为返回值,会添加event对象默认到最后一个参数不管没有传入参数,事件对象不用写,事件处理函数按顺序接收即可*/>
{/*JSX会默认构造数组*/>
)}exportdefaultApp是同样,如果数组元素值也是JSX,也可以直接使用。constitem1=[1,3,5]constitem2=[{item1}
item1
,item1
,item1
]functionApp(){return({/*JSX默认会构造数组*/>
)}exportdefaultApp在项目中,获取的数组元素大部分是对象数据。要显示结构,需要在使用前循环数组。//数组数据constarr=[{id:1,name:'绝对痴情'},{id:2,name:'像我这样的人'},{id:3,name:'南山南'}]//===Datatraversal===functionloops(){vara2=[]//遍历数据for(vari=0;i{item1}
{/*jsx中也可以直接使用数组值*/>{item2}
{/*调用遍历函数获取JSX数组显示*/}{loops()}
)}exportdefaultApp不推荐使用,太麻烦了。不过基本思路还是一样的,因为JSX可以自动构造数组结构,我们只需要遍历JSX数据形式的数据即可,所以可以选择更优雅的遍历方式map()函数。//数组数据constarr=[{id:1,name:'绝对痴情'},{id:2,name:'像我这样的帅哥'},{id:3,name:'南山难'}]functionApp(){return({/*map方法遍历数组*/}{arr.map(item=>
)}exportdefaultAppstylesettinginlinestyle样式需要以对象的形式显示://声明样式对象conststyles={color:'red',//需要处理的样式的属性名,or//font-size:'20px',//直接使用报错fontSize:'30px',//转为大写√'background-color':'pink'//用引号包裹√}functionApp(){return({item.id}--{item.name}
)}{/*内联样式需要对象形式显示*/>西岭老师真帅
)}exportdefaultAppOutreachStyles创建相应的CSS文件,并使用模块化语法规则导入样式文件。创建CSS文件\src\App.cssbody{background-color:skyblue;color:blue;}.box{font-size:30px;}\src\App.js//引入外部样式文件import'./App.css'functionApp(){return(小兰同学
hahahaha
)}else{return(嘿
)}}consttitle=(//使用括号,可以换行,代码更整洁{fun1()}
)ReactDom.render(title,document.getElementById('root'))[编辑推荐】ES6新增语法——Promise详解ReactvsSvelte:虚实DOM之战ES6新增语法——Async……敬请期待完整React开发视频教程React入门Step1:环境搭建详解