Vue 3.0中jsx语法的使用


Posted in Javascript onNovember 13, 2020

Vue 3.0 正式发布了,喜大普奔?。新的语法又要学习一阵阵,不过需要在生产环境下大面积使用,可能需要等到它的周边工具:vuex,vue-router 等等全部升级完毕。

Vue 3.0 中尤大使用的了新的编译工具 vite,革了 webpack 的命?。尝试看了下文档,发现支持 jsx 语法,由于这段时间都是在使用 react 来开发项目,jsx 完全不同的体验,更加的纯粹与灵活。

项目创建

npm init vite-app vite-vue
cd vite-vue
npm install
npm run dev

我们发现创建的目录解构很简单

Vue 3.0中jsx语法的使用

使用 JSX

Vue 3.0 直接支持 jsx 语法,新建 demo.jsx

export default function JsxTemp() {
 return <div>
 <h3>jsx</h3>
 </div>
}

引入到 App.vue 中可以完整显示

Vue 3.0中jsx语法的使用

再尝试绑定数据

import { ref } from 'vue'

export default function JsxTemp() {
 const state = ref(0)
 const onClick = () => {
 state.value++;
 console.log(state.value)
 }
 return <div>
 <h3>state: {state.value}</h3>
 <button onClick={onClick}>点击</button>
 </div>
}

我们发现没有像我们想的那样 state 数一直自增?

Vue 3.0中jsx语法的使用

这是因为我们在 Vue 3.0 中需要使用 defineComponent 包裹来使其变成一个双向绑定数据的组件
参数 为 setup function | object

import { defineComponent, ref } from 'vue'

export default defineComponent(() => {
 const state = ref(0)
 const onClick = () => {
 state.value++;
 console.log(state.value)
 }
 return () => (
 <div>
  <h3>state: {state.value}</h3>
  <button onClick={onClick}>点击</button>
 </div>
 )
})

可以看到现在是实时点击实现自增效果

Vue 3.0中jsx语法的使用

组件通信

组件间传值通信该怎么来实现呢?

我们需要改用对象的方式来传入通信数据

App.vue
<JsxTemp site="imondo.cn" @onGet="onGet" />
export default {
 ...
 methods: {
 onGet(e) {
  console.log('emit:', e)
 }
 }
}
...
export default defineComponent({
 props: {
 site: String
 },
 setup({ site }) {
 const state = ref(0)
 const onClick = () => {
  state.value++;
  console.log(state.value)
  context.emit('onGet', 'Mondo');
 }
 return () => (
  <div>
  <h1>props: {site}</h1>
  <h3>state: {state.value}</h3>
  <button onClick={onClick}>点击</button>
  </div>
 )
 }
})

实现效果

Vue 3.0中jsx语法的使用

总结

我们尝试了在 Vue 3.0 中如何使用 jsx ,这有助于我们在项目中更灵活的公用我们组件,由此也可以区分我们在项目中使用的方式

  • 无状态组件 我们完全可以使用纯函数来展示
  • 有状态组件 存在逻辑与数据绑定的组件则需要使用 Vue 3.0 提供的一系列组件 API

以上就是Vue 3.0 中 jsx 语法使用的详细内容,更多关于Vue 3.0 jsx 语法的资料请关注三水点靠木其它相关文章!

Javascript 相关文章推荐
javascript动态添加表格数据行(ASP后台数据库保存例子)
May 08 Javascript
jquery获得option的值和对option进行操作
Dec 13 Javascript
jQuery切换网页皮肤并保存到Cookie示例代码
Jun 16 Javascript
JavaScript判断是否为数组的3种方法及效率比较
Apr 01 Javascript
js闭包实现按秒计数
Apr 23 Javascript
D3.js实现雷达图的方法详解
Sep 22 Javascript
Bootstrap实现提示框和弹出框效果
Jan 11 Javascript
Vue生命周期示例详解
Apr 12 Javascript
vue2使用keep-alive缓存多层列表页的方法
Sep 21 Javascript
js轮播图之旋转木马效果
Oct 13 Javascript
浅析微信小程序自定义日历组件及flex布局最后一行对齐问题
Oct 29 Javascript
vue element和nuxt的使用技巧分享
Jan 14 Vue.js
vue点击Dashboard不同内容 跳转到同一表格的实例
Nov 13 #Javascript
解决iView Table组件宽度只变大不变小的问题
Nov 13 #Javascript
PHP 502bad gateway原因及解决方案
Nov 13 #Javascript
解决iview table组件里的 固定列 表格不自适应的问题
Nov 13 #Javascript
Flexible.js可伸缩布局实现方法详解
Nov 13 #Javascript
vue切换菜单取消未完成接口请求的案例
Nov 13 #Javascript
在vue中嵌入外部网站的实现
Nov 13 #Javascript
You might like
php学习笔记 面向对象的构造与析构方法
2011/06/13 PHP
PHP中几个常用的魔术常量
2012/02/23 PHP
php删除与复制文件夹及其文件夹下所有文件的实现代码
2013/01/23 PHP
destoon在各个服务器下设置URL Rewrite(伪静态)的方法
2014/06/21 Servers
php将html转成wml的WAP标记语言实例
2015/07/08 PHP
PHP利用缓存处理用户注册时的邮箱验证,成功后用户数据存入数据库操作示例
2019/12/31 PHP
Prototype 学习 工具函数学习($A方法)
2009/07/12 Javascript
深入理解JavaScript系列(9) 根本没有“JSON对象”这回事!
2012/01/15 Javascript
js实现图片放大缩小功能后进行复杂排序的方法
2012/11/08 Javascript
jquery中post方法用法实例
2014/10/21 Javascript
angularjs中的单元测试实例
2014/12/06 Javascript
jquery通过closest选择器修改上级元素的方法
2015/03/17 Javascript
drag-and-drop实现图片浏览器预览
2015/08/06 Javascript
AngularJs  Understanding Angular Templates
2016/09/02 Javascript
jQuery+CSS3实现仿花瓣网固定顶部位置带悬浮效果的导航菜单
2016/09/21 Javascript
webuploader模态框ueditor显示问题解决方法
2016/12/27 Javascript
微信小程序顶部可滚动导航效果
2017/10/31 Javascript
纯js实现隔行变色效果
2017/11/29 Javascript
layui 图片上传+表单提交+ Spring MVC的实例
2019/09/21 Javascript
Vue仿百度搜索功能
2020/12/28 Vue.js
python定时检查启动某个exe程序适合检测exe是否挂了
2013/01/21 Python
linux系统使用python监控apache服务器进程脚本分享
2014/01/15 Python
解决python通过cx_Oracle模块连接Oracle乱码的问题
2018/10/18 Python
Python把对应格式的csv文件转换成字典类型存储脚本的方法
2019/02/12 Python
TensorFlow获取加载模型中的全部张量名称代码
2020/02/11 Python
python数据库开发之MongoDB安装及Python3操作MongoDB数据库详细方法与实例
2020/03/18 Python
Python操作Jira库常用方法解析
2020/04/10 Python
Python装饰器的应用场景代码总结
2020/04/10 Python
利用pandas向一个csv文件追加写入数据的实现示例
2020/04/23 Python
Tarte Cosmetics官网:美国最受欢迎的化妆品公司之一
2017/08/24 全球购物
Bluebella法国官网:英国性感内衣品牌
2019/05/03 全球购物
共产党员公开承诺书
2014/03/25 职场文书
工作期间打牌检讨书范文
2014/11/20 职场文书
该怎么书写道歉信?
2019/07/03 职场文书
详细谈谈JavaScript中循环之间的差异
2021/08/23 Javascript
mysql中关键词exists的用法实例详解
2022/06/10 MySQL