您现在的位置是:网站首页> 编程资料编程资料
如何在vue中使用jsx语法_vue.js_
2023-05-24
260人已围观
简介 如何在vue中使用jsx语法_vue.js_
为什么需要在vue中使用jsx
几年前面试的时候,被问过这个问题,当时我一脸懵,这两个东西为啥要混用呢?
直到后来,我遇到了这种场景。
tab切换展示组件,大部分组件展示表格,除了2个tab需要展示不同,这个不同,怎么处理呢?
当然可以直接改封装的tab组件,v-if条件渲染嘛
那如果后面再有其他需求,tab组件继续写if么
这个时候,组件就过于冗余啦
那怎么让组件统一处理呢?当然可以用render函数来抽象组件啦
render函数写法有多恶心,想必大家都知道 => 不知道的看段简单的ul,li布局

with(this){ // this 就是 vm return _c( 'div', { attrs:{"id":"app"} }, [ _c( 'div', [ _c( 'input', { directives:[ { name:"model", rawName:"v-model", value:(title), expression:"title" } ], domProps:{ "value":(title) }, on:{ "input":function($event){ if($event.target.composing)return; title=$event.target.value } } } ), _v(" "), (!title) ? _c( 'button', { on:{ "click":add } }, [_v("submit")] ): _e() ] ), _v(" "), // 空字符串节点 _c('div', [ _c( 'ul', _l((list),function(item){return _c('li',[_v(_s(item))])}) ) ] ) ] ) }这...日子没法过了
于是我们就发现了jsx的好用,同样上述代码,可读性更高,更加精简
在vue中如何使用jsx
主要是依赖babel插件
- 安装babel依赖,
npm install babel-plugin-transform-vue-jsx babel-helper-vue-jsx-merge-props - 配置.babelrc文件
"plugins": [ [ "transform-vue-jsx" ] ]
- 子组件是函数式组件
// content.js export default { name: 'content', functional: true, props: { render: Function, column: { type: Object, default: null }, params: { type: Object, default: () => {} } }, render: (h, ctx) => { const params = ctx.props.params return ctx.props.render && ctx.props.render(h, params) } }- 父组件引入
template转jsx的语法转换
v-model,v-if,v-for,v-html,v-text,vue中的指令
- jsx语法是不会有对应的指令的,所以我们就要实现这些指令的功能,对于
v-model
// 在vue中// 对应jsx语法 function _input (value) { this.searchParams.searchVal = value }, item.render = (h, params) => { // 这里也可以从params传入参数 return ( ) }
v-if其实就是判断语句,用&&或三元表达式
// 在vue中// 对应jsx语法 item.render = (h, params) => { return ( this.show && ) }
v-for其实就是循环语句,用map
// 在vue中
- {{item.label}}
- { list.map((item, index) => (
- {item.label} ) }
v-html
item.render = (h, params) { return ( ) }vue中el-input组件上触发原生enter事件,@keyup.enter.native对应nativeOnKeyup
// 在vue中// 在jsx中 item.render = (h, params) => { function _keyup (e) { if (e.keyCode === 13) { // 13为enter键的键盘码 this.onSearch() } } return ( _keyup(e)}> ) }
vue中的插槽,在jsx中用scopedSlots
// 在vue中// 在jsx中 item.render = (h, params) => { return ( {{scope.row[column.value]}} { columnData.map((column, index) => ( ) }sortChange(...args)} scopedSlots={{ default: (scope) =>{scope.row[column.value]} }}> )) }
组件用-分隔的事件,在jsx中在第一段on后大写即可触发
比如el-table的sort-change,在jsx中是onSort-change,第一段在on后大写即可,见上个例子
到此这篇关于如何在vue中使用jsx语法的文章就介绍到这了,更多相关vue使用jsx语法内容请搜索以前的文章或继续浏览下面的相关文章希望大家以后多多支持!
您可能感兴趣的文章:
相关内容
- Vue.extend实现组件库message组件示例详解_vue.js_
- uniapp使用H5调试时跨域问题解决_javascript技巧_
- Vue transx组件切换动画库示例详解_vue.js_
- nvm版本导致npm install报错Unexpected token '.'的解决办法_node.js_
- react-redux action传参及多个state处理的实现_React_
- vue实现过渡动画Message消息提示组件示例详解_vue.js_
- 关于vuex状态刷新网页时数据被清空问题及解决_vue.js_
- 派发器抽离vue2单组件中的大量逻辑技巧_vue.js_
- vue时间组件DatePicker组件的手写示例_vue.js_
- VueX浏览器刷新如何实现保存数据_vue.js_

