04. React-使用jsx语法

使用JSX

在js文件中,默认不能写类似HTML的标记,否则会打包失败
可以使用 babel 来转换这些JS中的标签,将标签转换为虚拟DOM对象 React.createElement
注意:在js中混合写入类似于 HTML 的语法,叫做JSX语法;符合XML规范的JS

配置babel

一、安装babel插件

  • npm i babel-core babel-loader babel-plugin-transform-runtime -D
  • npm i babel-preset-env babel-preset-stage-0 -D

二、安装能够识别转换JSX语法的包

  • npm i babel-preset-react -D

三、在webpack.config.js中添加对babel插件的引用

//webpack 默认只能打包处理.js后缀名类型的文件,
//像.png .vue 无法主动处理
//所以要配置第三方的loader;
//所有第三方模块的配置规则放入module
module: {
	rules: [
		{
			test: /\.js|jsx$/,
			use: 'babel-loader',
			exclude: /node_modules/ //排除项目,必须,是正则不是字符串
		}
	]
}

四、在项目根目录文件夹中,添加babel配置文件.babelrc,注意这个文件名有个rc不是单独的babel

{
	"presets": ["env", "stage-0", "react"],
	"plugins": ["transform-runtime"]
}

源代码

JSX语法

在jsx中混合写入js表达式

  • 在 JSX 控制的区域内(HTML代码),要把js代码写到{}
  • jsx代码中的HTML标签必须遵循XML规范,<hr/>标签需要闭合,必须是小写

渲染类型

  • 渲染数字
  • 渲染字符串
  • 渲染布尔值:{true}不会在页面渲染,但不是报错;{true.toString}会渲染出true;三目运算{true?'真':'假'}可以渲染出真
  • 为属性绑定值:<p title = {title}>p标签</p>不要写双引号
  • 渲染jsx元素:let h1 = <h1>this is h1 tag</h1>{h1}渲染出h1标签;h1渲染出h1字符串
  • 数组let arrStr = ['一', '二', '三'],用{arrStr}渲染没有问题
  • 渲染jsx元素数组:
let arr = [
	<h2>这是h2</h2>,
	<h3>这是h3</h3>
]
ReactDOM.render(<div>{arr}</div>, document.getElementById('app'))
//Warning: Each child in an array or iterator should have a unique "key" prop.
  • 将普通字符串数组转为jsx数组并渲染到页面上(两种方案)

在jsx外部手动循环

let arrStr = ['一', '二', '三']

let nameArr = [];

arrStr.forEach(item => {
	let temp = <h5>{item}</h5>
	nameArr.push(temp)
})

ReactDOM.render(<div>
		{nameArr}
	</div>, document.getElementById('app'))
//Warning: Each child in an array or iterator should have a unique "key" prop.

jxs在内部循环

let arrStr = ['一', '二', '三']

ReactDOM.render(<div>
		{arrStr.map(item => <h5>{item}</h5>)}
	</div>, document.getElementById('app'))
//Warning: Each child in an array or iterator should have a unique "key" prop.

注意:

  • 在react中,需要把 key 添加给 被 forEach 或者 map 或者 for 循环直接控制的元素,否者会有警告
let arrStr = ['一', '二', '三']

ReactDOM.render(<div>
        {arrStr.map(item => <h5 key={item}>{item}</h5>)}
    </div>, document.getElementById('app'))

  • 在JSX中写注释:,推荐使用{/*这是注释*/},或者//
  • 为JSX中的元素添加class类名:需要使用className代替class;htmlFor替换label中的for属性
  • 在JSX常见DOM的时候,所有的节点,必须拥有唯一的根元素进行包裹
  • 在JSX语法中,标签必须成对出现,如果是单标签,则必须自闭合

当编译引擎,在编译JSX代码的时候
如果遇到<那么就把它当做HTML代码去编译
如果遇到了{}就把花括号内部的代码当做普通JS代码去编译

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值