共计 2086 个字符,预计需要花费 6 分钟才能阅读完成。
JSX 基本使用
JSX 是 JavaScript XML 的简写,表示在 JavaScript 代码中写 XML(HTML)格式的代码
声明式雨打更加直观、与HTML结构相同,降低了学习成本、提升开发效率
<!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> | |
</head> | |
<body> | |
<div id="app"> | |
</div> | |
</body> | |
<script crossorigin src="https://unpkg.com/babel-standalone@6.26.0/babel.js"></script> | |
<script crossorigin src="https://unpkg.com/react@17/umd/react.development.js"></script> | |
<script crossorigin src="https://unpkg.com/react-dom@17/umd/react-dom.development.js"></script> | |
<script type="text/babel"> | |
const jsx = ( | |
<h3>Hello, JSX</h3> | |
) | |
const h1 = React.createElement('h1', { | |
title: 'React', | |
}, 'Hello, React JS') | |
// ReactDOM.render(h1, document.querySelector('#app')) | |
ReactDOM.render(jsx, document.querySelector('#app')) | |
</script> | |
</html> |
使用步骤
// 1. 使用 JSX 语法创建 react 元素 | |
const title = <h1>Hello JSX</h1> | |
// 2. 使用 ReactDOMO.render() 方法渲染 react 元素到页面中 | |
ReactDOM.render(title, document.querySelector('#root')) |
- React 元素的属性名使用驼峰命名法
- 特殊属性名:class -> className、for -> htmlFor、tabindex -> tebIndex
- 额米有子节点的 React 可以使用
/>
结束 - 推荐使用小括号包裹 JSX,从而避免 JS 中的自动插入分号陷阱
// 使用小括号包裹 JSX | |
const title = ( | |
<h1>Hello JSX</h1> | |
) |
JSX 中使用 JS 表达式
{ }
let name = '张三' | |
const box = ( | |
<div>你好,我叫:{ name }</div> | |
) |
JSX 的条件渲染
可以使用 if/else
或 三元运算符 或 逻辑运算符 来实现
const isLoading = true | |
const loadData = () => { | |
if(isLoading) { | |
return <div>loading...</div> | |
} | |
return <div>数据加载完成,此处显示加载后的数据</div> | |
// return isLoading ? (<div>loading...</div>) : (<div>数据加载完成,此处显示加载后的数据</div>) | |
} | |
const load = ( | |
<div> | |
{ loadData() } | |
</div> | |
) |
JSX 的列表渲染
如果要渲染一组数据,应该使用数组的 map()
方法
渲染列表时应该添加 key 属性,key 属性的值要保证唯一
map() 遍历谁,就给谁添加 key 属性
尽量避免使用索引号作为 key
const users = [ | |
{ id: 1, name: '张三' }, | |
{ id: 2, name: '李四' }, | |
{ id: 3, name: '王五' } | |
] | |
const list = ( | |
<ul> | |
{ users.map(item => <li key={ item.id }>{ item.name }</li>) } | |
</ul> | |
) |
JSX 的样式处理
行内样式—style
第一个花括号表示的是要插入一个 JS 内容,第二个花括号表示插入的是一个对象
<h1 style={ { color: 'red', backgroundColor: 'skyblue' } }> | |
JSX 行内样式 | |
</h1> |
类名—className
// 引入 css | |
import './index.css' | |
<h1 className="title"> | |
JSX 类样式 | |
</h1> |
JSX 语法规则总结
- 定义虚拟 DOM 时,不要写引号
- 标签中混入 JS 表达式时要用
{ }
- 样式的类名指定不要用 class,要用
className
- 内联样式,要用
style={ { key: value, key: value } }
的形式去写 - 创建的虚拟 DOM 只能有一个根标签
- 标签必须闭合
- 标签首字母
- 若小写字母开头,则将该标签转为 html 中同名元素,若 html 中无该标签对应的同名元素,则报错
- 若大写字母开头,react 就去渲染对应的组件,若组件没有定义,则报错
正文完