技术标签: Web vue js vue3 javascript jsx
直入正题,vue3 对 jsx 和 ts 的支持更加完善,看一下 vue3 的 jsx 官方文档部分:
非常的简陋了,但是他给我们指引了 vue3 中 jsx 的 babel 转换插件 jsx-next 。
感兴趣的可以看一下他的 README,下面开始安装使用一下~
实际上 vue-cli 建立的 vue3 项目中已经内置了 jsx 的这个编译插件,如果你不需要自定义配置,是不需要安装就可以即开即用 jsx 的,可谓是非常贴心了。
安装过程如下:
yarn add -D @vue/babel-plugin-jsx
安装后在 package.json
看到目前是 rc 状态,还没有正式发布,我们只是简单体验一下。
之后在 babel.config.js
内配置该插件:
module.exports = {
// 这是原来的预设,cli 搭建项目就有的
presets: [
'@vue/cli-plugin-babel/preset'
],
// 需要配置的插件
plugins: ['@vue/babel-plugin-jsx']
}
之后就可以使用 jsx 了!
建立一个 views/Demo.jsx
:
import {
defineComponent, ref } from 'vue'
const Demo = defineComponent({
name: 'demo',
setup (props) {
const input = ref(null)
const click = (e) => {
console.log(e)
console.log(input.value)
}
return {
click,
input
}
},
render () {
return (
<>
<div>test</div>
<button onClick={
this.click}>点击</button>
<input v-model={
this.input} placeholder="啊这"/>
</>
)
}
})
export default Demo
demo 的大致框架如上所示,不需要在意上面的 demo 写了什么,只需要在意整体的结构如下:
defineComponent()
定义组件,这是为了使得 ts 和 ide 能进行类型推断,从而获得代码提示功能,在配置路由的时候可选用 () => import()
进行懒加载:
{
path: '/demo',
name: 'demo',
component: () => import(/* webpackChunkName: "demo" */ '../views/Demo.jsx')
}
注:如果你没有代码提示,那一定是没有使用 defineComponent()
,有了这个东西,你才能获得代码提示。
异步组件
我们手写一个异步组件的使用例子:
import Demo from '../views/Demo'
// ......
// 路由
{
path: '/async',
name: 'async',
component: defineAsyncComponent({
// 工厂函数
loader: Async,
// 加载异步组件时要使用的组件
loadingComponent: Demo
})
}
这里的 loadingComponent
就是组件 loading 时要显示的内容,而 loader 就是要加载的异步组件。
建立一个 views/Async.jsx
:
import {
defineComponent } from 'vue'
const Async = () => new Promise((resolve, reject) => {
setTimeout(() => {
resolve(defineComponent({
render () {
return <div>async component</div>
}
}))
}, 3000)
})
export default Async
这段代码只是把 webpack 给我们的 () => import()
变成手写 Promise
了,在 resolve()
内你可以返回你需要加载的组件,当然我们还要用 defineComponent()
以获得代码提示功能保证 eslint 不报错。
注:
loader
的目标组件必须是返回一个 Promise
的函数,使用 () => import()
可以达到相同的效果(他会使用一个 Promise
帮你包裹组件),这里我们为了主动延时才手写了 Promise
。loadingComponent
需要是一个同步组件。有关更多异步组件 defineAsyncComponent
的选项可以查看官方文档的中文社区翻译版:defineAsyncComponent
定义完组件就是 setup
了,为什么不用 vue2 的 template 呢?那就不是 jsx 了。
有关这部分该如何使用,请看 官方文档 即可。
在 defineComponent
组件块内,完全和 vue3 新语法等同,还可以使用 props
对上层传入进行限制、指定,以及使用 name
等关键词:
const Demo = defineComponent({
name: 'demo',
props: {
key1: {
type: String,
required: true
}
}
}
render
才是 jsx 的核心部分,所有的 jsx 要在此处顶层返回。
和 react 的函数式相比,在 render
内的 jsx ,你还需要使用 this
取得 setup
阶段返回的值。
如果实际体验一下,会发现和 react 的函数式组件还是有天壤之别,Vue 本来就不是为 jsx 而生的,template 它不香吗。
附:
官方 Vue3 文档:Vue3 Guide
民间中文版 Vue3 文档:Vue3 文档
JSX 插件已经内置到 vue-cli 创建的项目中的 issue :这个已经内置到cli 里面去了?
更多 Vue JSX 的用法请看官方 babel 插件的 README :Vue 3 Babel JSX 插件
一、学习java预备工作:1、dos命令行dir:列出当前目录下的文件和文件夹md:创建目录rd:删除目录del:删除文件exit::推出dos命令行2、java特性:与平台无关原理:在运行java应用程序的操作系统上安装java虚拟机(JVM)3、java语言的环境搭建一劳永逸方式:电脑->属性->高级->path路
信息论解决称球问题:点击打开链接
之前写过一篇文章介绍如何用thrifty-compiler 通过IDL生成client代码《Microsoft/thrifty:解决thrifty-compiler.jar运行报错不能编译IDL生成java class代码问题》但是Microsoft/thrifty官方并没有提供maven插件用于在maven中调用thrifty-compiler,我的项目是用maven组织的所以在pom....
参考资料:海思Hi3515的UART2和UART3是如何被加载到内核中的http://blog.163.com/softtwo_2/blog/static/27007702201272364522572/Hi3520D和Hi3515有些不一样的地方;Hi3520D的UART驱动位于linux-3.0.y/drivers/tty/serial/amba-pl011.c
全部笔记的汇总贴:《人工神经网络原理》-读书笔记汇总Hopfield神经网络丢弃了“层次”概念,创造出无层次的全互联型神经网络。引入了“能量函数”的概念,阐明了神经网络与动力学之间的关系,使得神经网络的运行稳定性判断有了可靠而简便的依据。两种形式离散型连续型连续型Hopfield神经网络与电子电路存在明显对应关系,便于用集成电路实现。一、离散型Hopfield神经网络离散型Hopfield神经网络结构有反馈的单层全互联结构nnn个神经元之间相互双向连接,神经元iii与神经元jjj之间
1.前言Java 8 提供了非常好用的 Stream API ,可以很方便的操作集合。今天我们来探讨两个 Stream 中间操作 map(Function
Cartographer是google推出的基于激光雷达的SLAM算法。Cartographer官方的编译安装步骤可以在https://google-cartographer-ros.readthedocs.io/en/latest/compilation.html#上查看。但是在国内由于网络的原因,这个步骤并不适用。这里介绍它在国内网络环境下的安装和配置。首先需要安装ROS,这里就不涉及,可以参考ROS的文档进行。ROS具体的版本没有影响,可以是Kinetic或者Melodic。
编码和解码的基本介绍编写网络应用程序时,因为数据在网络中传输的都是二进制字节码数据,在发送数据时就需要编码,接收数据 时就需要解码codec(编解码器) 的组成部分有两个:decoder(解码器)和 encoder(编码器)。encoder 负责把业务数据转换成字节 码数据,decoder 负责把字节码数据转换成业务数据Netty 本身的编码解码的机制和问题分析Netty 自身提供了一些 codec(编解码器)Netty 提供的编码器StringEncoder,对字符串数据进
1.流程预览2.Activities属性值Invoke Code:
Python使用gdal实现影像镶嵌如果要对某个文件夹下的多景影像进行镶嵌,我们需要知道镶嵌后影像的行列数目,以及该影像的六个地理变换参数,(值得特别注意的是,无论是影像的重采样还是镶嵌,都需要特别关注影像的6个地理变换参数),关于这六个地理变换参数,请参考我的另一篇博文:https://blog.csdn.net/SunStrongInChina/article/details/1042629...
FROM:http://tjmljw.iteye.com/blog/1767716起因:想把一个float[]转换成内存数据,查了一下,下面两个方法可以将float转成byte[]。 方法一 Java代码 import java.nio.ByteBuffer; import java.util.ArrayList; float buff
一周匆匆, 上周开始坚持跑步了, 然后学了学python, 跟媳妇的冷战仍然继续, 昨天是冬至, 昨天和PH出去买了面包了饺子,猪肉大葱, 挺香的, 我最近心态慢慢的从婚姻失败中一点点的走出来, 今天早晨跑步的时候, 在公园碰到一个大妈在用播放器播放什么善恶福报的事情, 现在中国好多人也在修传统的各个门派, 感觉中国很浮躁, 急功近利, 反而心神不安, 不过信仰总是好的, 信仰能让人们朝着自己的心...