Vue 3.0 正式公布了,喜大普奔????。新的语法又要学习一阵阵,不过须要在生产环境下大面积应用,可能须要等到它的周边工具:vuex,vue-router 等等全副降级结束。
Vue 3.0 中尤大应用的了新的编译工具 vite,革了 webpack 的命????。尝试看了下文档,发现反对 jsx 语法,因为这段时间都是在应用 react 来开发我的项目,jsx 齐全不同的体验,更加的纯正与灵便。
我的项目创立
npm init vite-app vite-vuecd vite-vuenpm installnpm run dev
咱们发现创立的目录解构很简略
应用 JSX
Vue 3.0 间接反对 jsx 语法,新建 demo.jsx
export default function JsxTemp() { return <div> <h3>jsx</h3> </div>}
引入到 App.vue 中能够残缺显示
再尝试绑定数据
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 中须要应用 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> )})
能够看到当初是实时点击实现自增成果
组件通信
组件间传值通信该怎么来实现呢????
咱们须要改用对象的形式来传入通信数据
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 提供的一系列组件 API
本人也尝试总结了入门级开发小册,欢送大家斧正????
参考:
- vue global api