首頁 > 軟體

詳解在vue3中使用jsx的設定以及一些小問題

2022-03-11 10:00:16

設定

在vue3中使用jsx十分方便,只需要安裝官方的@vitejs/plugin-vue-jsx外掛,在vite.config.ts中設定

// vite.config.ts
import vueJsx from "@vitejs/plugin-vue-jsx";

export default {
  plugins: [vueJsx()]
}

設定了vite.config.ts後雖然已經可以使用jsx,頁面也正常渲染了,但是還是會提示無法使用jsx,此時還需要在tsconfig.ts中設定"jsx": "preserve"屬性,就可以愉快的使用jsx形式來寫vue了。

// tsconfig.ts
{
  "jsx": "preserve",
}

模版語法

使用jsx時setup需要返回一個函數,函數返回jsx形式。不過使用jsx形式也有不好的地方,在使用資料就比較煩,不能像模版中一樣直接使用,需要加上.value,雖然新的volar外掛已經會自動新增.value了,但還是很難受,一不小心就會忘記寫。

<script lang="tsx">
import { defineComponent, ref } from "vue";

export default defineComponent({
  setup() {
    const msg = ref("tsx component");
    return () => {
      return <div>{msg.value}</div>;
    };
  },
});
</script>

v-if/v-show

還有不太方便的一個點就是v-if無法使用,jsx中得使用三元表示式,但是三元感覺看起來不是很舒服

export default defineComponent({
  setup() {
    const msg = ref("tsx component");
    const isShow = ref(false);

    function onClick() {
      isShow.value = !isShow.value;
    }

    return () => {
      return (
        <div>
          <div>{msg.value}</div>
          {isShow.value && <div>{isShow.value ? "show" : "hide"}</div>}
          <el-button onClick={onClick}>onClick</el-button>
        </div>
      );
    };
  },
});

如果直接使用v-if就會報錯無法讀取未定義的屬性

但是v-show是可以使用的,但v-if不行,不知道為什麼,可能是直接jsx預設推薦使用isShow && <div/>或者三元的形式吧

<div>
  <div>{msg.value}</div>
  {isShow.value && <div>{isShow.value ? "show" : "hide"}</div>}
  <div v-show={isShow.value}>{isShow.value ? "show" : "hide"}</div>
  <el-button onClick={onClick}>onClick</el-button>
</div>

v-show正確顯示出了show div,dom中也是通過display做的顯影,三元則是建立和銷燬的dom

v-for就更不用想了,就用map吧,map也挺好用的,不過v-model還是可以使用的,顯示也正常

export default defineComponent({
  setup() {
    const msg = ref("tsx component");
    return () =&gt; {
      return (
        &lt;div&gt;
          &lt;div&gt;{msg.value}&lt;/div&gt;
          &lt;el-input v-model={msg.value} /&gt;
        &lt;/div&gt;
      );
    };
  },
});

到此這篇關於在vue3中使用jsx的設定以及一些小問題的文章就介紹到這了,更多相關在vue3中使用jsx的設定以及一些小問題內容請搜尋it145.com以前的文章或繼續瀏覽下面的相關文章希望大家以後多多支援it145.com!


IT145.com E-mail:sddin#qq.com