一、JSX定义
JSX
是 JavaScript
的扩展语法,这种 <></>
标签的写法就是 JSX。JSX就是Javascript+XML。即在Javascript里面写XML,因为JSX的这个特性,所以他即具备了Javascript的灵活性,同时又兼具html的语义化和直观性。JSX 编写的组件通过预处理器 babel 解析后,再交给 React 库渲染到指定父容器下,形成最终html页面,供浏览器解析和显示。
二、JSX使用
1. 声明变量,
1
| const e = <h1>hello</h1>;
|
2. 设置属性
1 2
| const e = <div tabIndex="0"></div>; const e = <img src={user.avatarUrl}></img>;
|
1 2 3 4 5 6 7 8
| render() { const inputAttrs = { type: 'email', placeholder: 'Enter your email' }
return <input {...{ attrs: inputAttrs }} /> }
|
3. 包含多个子元素
1 2 3 4 5 6
| const e = ( <div> <h1>Hello!</h1> <h2>Shit!</h2> </div> )
|
4. 作为表达式在return中返回
1 2 3 4 5 6
| function getGreeting(user) { if (user) { return <h1>Hello, {formatName(user)}!</h1>; } return <h1>Hello, Stranger.</h1>; }
|
1 2 3
| render() { return <FormRender node={ this.form.getRoot() } /> }
|
1 2 3 4 5 6 7
| import MyComponent from './my-component'
export default { render() { return <MyComponent>hello</MyComponent> }, }
|
5. 使用JS表达式
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
| function formatName(user) { return user.firstName + ' ' + user.lastName; }
const user = { firstName: 'Harper', lastName: 'Perez' };
const element = ( <h1> Hello, {formatName(user)}! </h1> );
ReactDOM.render( element, document.getElementById('root') );
function NumberList(props) { const numbers = props.numbers; return ( <ul> {numbers.map((number) => <ListItem key={number.toString()} value={number} /> )} </ul> ); }
|
6. 消息框内html
1 2 3 4 5
| Message.alert({ messge: <div>确定要删除<span style="color:red">学习子君Vue系列文章</span>的笔记?</div>, type: 'warning' })
|
7. 函数式组件
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
| export default { functional: true,
render(h, context) { const { props } = context if (props.avatar) { return <img src={props.avatar}></img> } return <img src="default-avatar.png"></img> } }
|
- https://zhuanlan.zhihu.com/p/419011328
- https://blog.csdn.net/qq_31967569/article/details/118146056?utm_medium=distribute.pc_relevant.none-task-blog-2~default~baidujs_baidulandingword~default-1.pc_relevant_aa&spm=1001.2101.3001.4242.2&utm_relevant_index=4
- https://github.com/vuejs/jsx-vue2#installation