04|模版语法和JSX语法:你知道Vue可以用JSX写吗?
什么是模板语法?
- 深入了解
- 翻译
- 解释
- 总结
Vue.js 3的开发语法包括模板语法和JSX语法两种主要方式。模板语法基于HTML语法的扩展,支持模板节点声明、属性设置和事件注册,同时也支持Vue.js自定义的属性语法,如v-on等。JavaScript代码放在script标签中,使用Composition API操作,而CSS样式代码与HTML中的使用方式一致,但可以加上scoped和lang属性。另一方面,JSX语法提供了更灵活的编程能力,适用于特定的开发需求。文章通过示例代码对比了模板语法和JSX语法的实现差异,帮助读者更好地理解两种语法的使用方式和区别。在实现需求场景上,JSX语法具有更灵活的功能实现和后续代码维护,尤其在动态组件渲染和条件渲染方面表现出明显优势。尽管两种语法各有优点,但并非互斥,可以共存互相使用。因此,在基于Vue.js 3开发的项目中,可以根据需求场景选择合适的语法,以便更从容地应对项目开发过程中遇到的各种问题。文章还提到了在团队中,不同技术能力的成员可以通过选择合适的语法来方便项目技术实现的沟通。同时,建议读者可以借鉴一些使用JSX语法的成熟Vue.js 3开源项目,以便更好地学习和应用JSX语法。文章还强调了在实际团队的项目开发中,选择某种技术或者技术模式时,不仅要考虑技术优缺点,还要考虑人员的能力程度,综合考虑选择出高效率的技术方案。
《Vue 3 企业级项目实战课》,新⼈⾸单¥59
全部留言(9)
- 最新
- 精选
- 深山大泽平原用模板语法的数组实现组件的reverse: <template> <div class="template-reverse-box"> <template v-for="item in comArr"> <component :is="item.name"></component> </template> <button @click="changeModule">reverse</button> </div> </template> <script setup lang="ts"> import { reactive, markRaw} from 'vue'; import Module01 from './Module01.vue' import Module02 from './Module02.vue' import Module03 from './Module03.vue' import Module04 from './Module04.vue' type Item = { name: any } let comArr = reactive<Item[]>([ { name: markRaw(Module01) }, { name: markRaw(Module02) }, { name: markRaw(Module03) }, { name: markRaw(Module04) }, ]) const changeModule = () => { comArr.reverse() } </script>
作者回复: 您好,你提供的代码非常棒!本课受限于篇幅,没能展开讲解Vue.js 3的<component /> 组件。
2022-12-08归属地:重庆35 - ZR-rdJSX 不能配置 scoped 避免 CSS 样式干扰,那么 JSX 应该如何做才能避免样式干扰呢
作者回复: 您好,避免样式干扰方式有很多。 1. 可以从className角度处理,比如可以约定一个className命名规律,尽量避免className重名。 2. 可以借助JS in CSS处理方案,比如用 styled-components这个npm模块。
2022-12-02归属地:北京41 - 直须怎么在.vue文件中引入jsx组件呢
作者回复: 您好,在.vue文件里可以直接引入JSX组件的,这个取决于所用的构建工具(Webpack、Vite等)是否加载了Vue JSX语法的编译插件。
2023-02-09归属地:广东4 - 飞雪👻想请教一下, 我不太明白在用JSX写转换顺序, render函数中-------转换顺序: {`${isReverse}`}------ 为什么不直接写作{ isReverse } , 而是用模板字符串包裹呢 ?
作者回复: 您好,两种书写方式都可以的,本课代码只是写多一个模板字符串的使用,无特殊用意。
2022-12-02归属地:陕西2 - 都市夜归人用模板方法一样能通过调整数组的顺序去实现,而不是用v-if。这是为了使用JSX而这样做的吧,个人觉得例子举的不是很恰当。2022-11-30归属地:江苏12
- 请叫我潜水员dialog那个例子用模板是一样的效果,Dialog组件从dialog.vue中引入,然后创建一个相同的createDialog,使用效果一模一样。因为我就是这么用的2022-11-29归属地:广东31
- xhsndl1. 模板语法实现组件递归(借鉴了前辈的想法) <template v-for="item in array" :key="item"> <component :is="item"/> </template> <script> import A1 from "./A1.vue" import A2 from "./A2.vue" import A3 from "./A3.vue" import {reactive,markRaw} from "vue" let array = reactive([ markRaw(A1), markRaw(A2), markRaw(A3), ]) </script> 2. JSX实现模板组件递归 想法是将组件构造函数引入,结合数组对象来进行实现 // 预先用jsx语法实现了A组件,假设用text接收参数、onOk接收点击事件的回调函数 // 创建组件后返回onClose方法 <script> import {createA} from "./A.jsx" let A1 = createA({ text:'123456', onOk:() => { A1.onClose() } }) </script> // --------------- // 实现JSX的循环调用 <script> import {createA} from "./A.jsx" import {reactive} from "vue" let array = reactive(['123','456','789']) array.forEach(item => let temp = createA( text:item, onOk:() => temp.onClose() ) ) </script>2024-01-19归属地:贵州
- Spike Jim.Funjsx的css模块化可以使用postcss-modules实现2023-12-09归属地:中国香港
- 中欧校友模板语法递归在组件内用name名再次引用,JSX在组件函数内直接使用函数名调用实现梯柜2023-07-30归属地:上海