关于前端:Vue-30-中-jsx-语法尝试

46次阅读

共计 1532 个字符,预计需要花费 4 分钟才能阅读完成。

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

咱们发现创立的目录解构很简略

应用 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

正文完
 0