目次
Background
文法
1.基本使用法
tempalte
の Dom タグ
には
map ループを使用できます
&&、||
ホームページ ウェブフロントエンド Vue.js vue3でjsx構文を使用する方法

vue3でjsx構文を使用する方法

May 12, 2023 pm 12:46 PM
vue3 jsx

    Background

    vue3composition-api setup フォームの使用を促進するプロジェクト
    Cooperate withjsx hooksForm をビジネスごとに分離すると、ロジックがより明確になり、メンテナンスがより便利になります。

    文法

    以下は主に、jsxとテンプレートの異なる構文を比較することで同じ機能を実現しています

    #1. 通常の内容

    通常のコンテンツ定数は同じ方法で記述されます

    //jsx 写法
    setup() {
      return ()=><p type="email">hello</p>
    }
    
    //tempalte 写法
      <tempalte>
         <p type="email">hello</p>
      </template>
    ログイン後にコピー
    2. 動的変数

    jsx

    中括弧を使用して変数を囲みます 引用符なしで、例:

    {age}
    テンプレート コンテンツは
    二重中括弧 で囲まれ、属性変数は次のように始まります。コロン
    {{age}}

    ##{} などは jsx の汎用的な使用法です
    JS式

    ループロジック操作など

    //jsx 写法
    setup() {
      let age = 1           
      return ()=><div age={age}>{age}</div> //没有" "包裹,统一都是{}
    }
    
    //tempalte 写法
      <tempalte>
         <div :age="age">{{age}}</div>
      </template>
    ログイン後にコピー

    3.関数イベント

    1.基本使用法

    jsx

    tempalte の機能の違いは次のとおりです。

    • jsx

      キャメルケース では ## を使用します (最初の文字は大文字になります)、template@ ダッシュ フォーム ## を使用します##jsx

      メソッド名は
    • {}
    • で囲む必要があります。

      tempalte" "# で囲みます##ユースケース 1:

      //jsx 写法
      setup() {
        const age= ref(0);
        let inc = ()=>{
            age.value++
         }
        return ()=> <div onClick={inc}>{age.value}</div>
      }
      
      //tempalte 写法
        <tempalte>
           <div @click="inc">{{age}}</div>
         </template>
      ログイン後にコピー
      2. パラメーターの拡張

    #jsx

    および

    tempalte

    No self パラメータを定義する関数

    は () で終わる必要はありません jsx パラメータを指定した 関数を使用する場合 アロー関数を使用する必要がありますパッケージ:
    {()=>fn(args)}jsxwithModifiers を使用する必要があります を実装するには .self,
    .stop などの修飾子の効果 使用例 2: <div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:php;toolbar:false;'>//jsx 写法 import { withModifiers} from &quot;vue&quot;; ... setup() { const age= ref(0); let inc = ()=&gt;{ age.value++ } return ()=&gt; ( &lt;&gt; //根 路径必须有节点,或者用&lt;&gt;代表fragment空节点 &lt;div onClick={inc}&gt;{age.value}&lt;/div&gt; //无自定义参数,不需要() &lt;div onClick={()=&gt;inc(&amp;#39;test&amp;#39;)}&gt;{age.value}&lt;/div&gt; //有参数,需要()=&gt;包裹 //withModifiers包裹vue修饰符 &lt;div onClick={withModifiers(inc, [&quot;stop&quot;])}&gt;{age.value}&lt;/div&gt; //也可以再inc函数中使用e.stopPropagation()等 &lt;input onKeyup=={(ev) =&gt; { //键盘事件enter事件 //逻辑部分也可以写入js if (ev.key === &amp;#39;Enter&amp;#39;) { inc (); } }}&gt;&lt;/input &gt; &lt;/&gt; ) } //tempalte 写法 &lt;tempalte&gt; &lt;div @click=&quot;inc&quot;}&gt;{{age}}&lt;/div&gt; &lt;div @click=&quot;inc(&amp;#39;test&amp;#39;)&quot;}&gt;{{age}}&lt;/div&gt; &lt;div @click.stop=&quot;inc&quot;}&gt;{{age}}&lt;/div&gt; //stop修饰符 &lt;input @keyup.enter=&quot;inc&quot;}&gt;{{age}}&lt;/input&gt; //键盘事件enter事件 &lt;/template&gt;</pre><div class="contentsignin">ログイン後にコピー</div></div>Four, ref bindingvue3 ref には 2 つのタイプがあります。1 つは

    ref() で定義された双方向バインディング変数
    を参照し、もう 1 つは

    にバインドされた ref 参照です。

    ref() 双方向バインディング変数

    の Dom タグ

    ## では、jsx は template# に対する .value の問題を自動的に処理しません。 ##、

    Dom タグの値
    を手動で追加する必要があります。 ref 参照

    、jsx は ref(null) 変数 を直接使用します。## を追加する必要はありません。 #.valuetempalte は、同じ名前の 文字を使用します String
    ##ユースケース:

    //jsx 写法
    setup() {
      const divRef=ref(null);
      const age= ref(0);  
      return ()=>
       (
         <div ref={divRef} > //Dom标签的ref引用
            <span>{age.value}</span>   //ref()双向绑定变量
         </div>
       ) 
    }
    
    //tempalte 写法
      <tempalte>
         <div ref=&#39;divRef&#39;>  //Dom标签的ref,使用同名字符串
            <span>{{age}}</span>   //ref()双向绑定变量,不需要.value
         </div>
      </template>
    ログイン後にコピー
    五丶v-モデル構文v-model

    コンポーネントが
    ではなく jsx で

    v-model または v-models

    を使用するtemplate

    には

    1 つの v-model

    しかありません。v-model 構文 コンポーネントを使用します。 複数の v-model しかない場合は、v-model:xx を使用できます。構文

    複数の v-model
    がある場合、

    v-models 構文を使用することもできます。2 次元配列 ( は新しいバージョンでは推奨されません
    )使用例:

    //jsx 写法
    setup() {
      const age= ref(0);  
      const gender =ref(&#39;&#39;)
      return ()=>
       (
         <tz-input v-model={age} />   
         <tz-input v-model:foo={age} />  //v-model带修饰,推荐(v-model:修饰符)
         <tz-input v-model={[age, "foo"]} />  //v-model带修饰 (新版不推荐)
    
         //多个v-model
         <tz-input    //推荐(v-model:修饰符)
           v-model:foo={age}
           v-model:bar={gender}
         />  
         <tz-input   
           v-models={[          //使用v-models,传递二维数组 (新版不推荐)          
             [age, "foo"], 
             [gender, "bar"],
             ]}
         />
       ) 
    }
    
    //tempalte 写法
      <tempalte>
         <tz-input v-model="age" />
         <tz-input v-model.foo="age" />  //v-model带修饰
         <tz-input 
           v-model.foo="age"     //多个v-model
           v-model.bar="gender"
         />
      </template>
    ログイン後にコピー
    6 番目、v-slots 構文

    v- の代わりに v-slots を使用します。 jsx のスロット (# の省略形) ユースケース:

    //jsx 写法
    //方法一
    const App = {
      setup() {
        const slots = {
          default: () => <div>A</div>,     //默认插槽
          bar: () => <span>B</span>,       //具名插槽
        };
        return () => <A v-slots={slots} />;
      },
    };
    //方法二
    const App = {
      setup() {
        return () => (
          <>
            <A>
              {{
                default: () => <div>A</div>,   //此方法 默认default不能少
                bar: () => <span>B</span>,   //具名插槽
              }}
            </A>
            <B>{() => "foo"}</B>
          </>
        );
      },
    };
    
    //tempalte 写法
     <tempalte>
       <tempalte v-slot:bar>  //具名插槽,也叫 #bar
         <A />
       </template>
       <tempalte v-slot:default>
         <A />
       </template>
     </template>
    ログイン後にコピー
    Seven, v-for 構文

    jsx

    map ループを使用できます

    tempalte の v-for

    ロジックを実装するための

    js

    ユースケース:

    //jsx 写法
    setup() {
      const arr= ref([{label:&#39;1&#39;},{label:&#39;2&#39;},{label:&#39;3&#39;}]);      
      return ()=>(   
         <>
         { arr.value.map(item=> <span key={item.label}>{item.label}</span> ) }
         </>
        ) 
    }
    
    //tempalte 写法
      <tempalte>
         <span v-for="item in arr" :key="item.label">{{item.label}}</span> 
      </template>
    ログイン後にコピー

    八丶v-if 構文

    jsx は、jstempalte の v-ifLogic で if ロジック

    三項演算

    &&、||

    などを使用して実装できます。

    使用例:

    //jsx 写法
    setup() {
      const show= ref(false);      
      return ()=>(   
         <>
         {show && <span>test vif</span>}      //使用&&运算    
         {!show && <span>test velse</span>}
         </>
        ) 
    }
    
    setup() {
      const show= ref(false);      
      return ()=>(   
         <>
          <span>{show.value ? &#39;test vif&#39; : &#39;test velse&#39;}</span>    //三目运算   
         </>
        ) 
    }
    
    setup() {
      const show= ref(false); 
      const vif=()=>{
         if(show) {
            return  <span>test vif</span> 
         }
         return  <span>test velse</span> 
      }   
      return ()=>(   
         <>
            vif()   //if条件函数
         </>
        ) 
    }
    
    //tempalte 写法
      <tempalte>
         <span v-if="show">test vif</span> 
         <span v-else>test velse</span> 
      </template>
    ログイン後にコピー
    9丶v-show syntax使用例:
    //jsx 写法
    setup() {
      const show= ref(false);      
      return ()=>(   
         <>
          <span v-show={show.value}> test vshow</span>    //v-show
         </>
        ) 
    }
    
    //tempalte 写法
      <tempalte>
        <span v-show="show"> test vshow </span> 
      </template>
    ログイン後にコピー
    10.命令 修飾子の使用法 ディレクティブは underscore

    を使用します (v-loading

    など) 使用例:

    //jsx 写法
    setup() {
      const isLoading= ref(true);      
      return ()=>(   
         <>
          <span v-loading_fullscreen_lock={isLoading}> loading </span>    
         </>
        ) 
    }
    
    //tempalte 写法
      <tempalte>
        <span v-loading.fullscreen.lock="isLoading"> loading </span> 
      </template>
    ログイン後にコピー

    以上がvue3でjsx構文を使用する方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

    このウェブサイトの声明
    この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

    ホットAIツール

    Undresser.AI Undress

    Undresser.AI Undress

    リアルなヌード写真を作成する AI 搭載アプリ

    AI Clothes Remover

    AI Clothes Remover

    写真から衣服を削除するオンライン AI ツール。

    Undress AI Tool

    Undress AI Tool

    脱衣画像を無料で

    Clothoff.io

    Clothoff.io

    AI衣類リムーバー

    AI Hentai Generator

    AI Hentai Generator

    AIヘンタイを無料で生成します。

    ホットツール

    メモ帳++7.3.1

    メモ帳++7.3.1

    使いやすく無料のコードエディター

    SublimeText3 中国語版

    SublimeText3 中国語版

    中国語版、とても使いやすい

    ゼンドスタジオ 13.0.1

    ゼンドスタジオ 13.0.1

    強力な PHP 統合開発環境

    ドリームウィーバー CS6

    ドリームウィーバー CS6

    ビジュアル Web 開発ツール

    SublimeText3 Mac版

    SublimeText3 Mac版

    神レベルのコード編集ソフト(SublimeText3)

    vue3+vite: src に画像を動的にインポートするために require を使用するときのエラーを解決する方法 vue3+vite: src に画像を動的にインポートするために require を使用するときのエラーを解決する方法 May 21, 2023 pm 03:16 PM

    vue3+vite:src は、イメージとエラー レポートと解決策を動的にインポートするために require を使用します。vue3+vite は複数のイメージを動的にインポートします。vue3。TypeScript 開発を使用している場合、イメージを導入するために require のエラー メッセージが表示されます。requireisnotdefined は使用できません。 vue2 のような imgUrl:require(' .../assets/test.png') は、typescript が require をサポートしていないため、インポートされます。そのため、import が使用されます。解決方法は次のとおりです: awaitimport を使用します

    vue3 プロジェクトで tinymce を使用する方法 vue3 プロジェクトで tinymce を使用する方法 May 19, 2023 pm 08:40 PM

    tinymce はフル機能のリッチ テキスト エディター プラグインですが、tinymce を vue に導入するのは他の Vue リッチ テキスト プラグインほどスムーズではありません。tinymce 自体は Vue には適しておらず、@tinymce/tinymce-vue を導入する必要があります。外国のリッチテキストプラグインであり、中国語版を通過していないため、公式 Web サイトから翻訳パッケージをダウンロードする必要があります (ファイアウォールをバイパスする必要がある場合があります)。 1. 関連する依存関係をインストールします npminstalltinymce-Snpminstall@tinymce/tinymce-vue-S2. 中国語パッケージをダウンロードします 3. スキンと中国語パッケージを導入します. プロジェクトのパブリック フォルダーに新しい tinymce フォルダーを作成し、

    Vue3 がマークダウンを解析し、コードのハイライトを実装する方法 Vue3 がマークダウンを解析し、コードのハイライトを実装する方法 May 20, 2023 pm 04:16 PM

    Vue はブログ フロントエンドを実装しており、マークダウン解析を実装する必要があり、コードがある場合はコードのハイライトを実装する必要があります。 Vue には、markdown-it、vue-markdown-loader、marked、vue-markdown など、マークダウン解析ライブラリが多数あります。これらのライブラリはすべて非常に似ています。ここではMarkedが使用され、コード強調表示ライブラリとしてhighlight.jsが使用されます。 1. 依存ライブラリをインストールする vue プロジェクトの下でコマンド ウィンドウを開き、次のコマンド npminstallmarked-save//marked を入力して、マークダウンを htmlnpmins に変換します。

    Vue3 でページの部分的なコンテンツを更新する方法 Vue3 でページの部分的なコンテンツを更新する方法 May 26, 2023 pm 05:31 PM

    ページの部分的な更新を実現するには、ローカル コンポーネント (dom) の再レンダリングを実装するだけで済みます。 Vue でこの効果を実現する最も簡単な方法は、v-if ディレクティブを使用することです。 Vue2 では、v-if 命令を使用してローカル dom を再レンダリングすることに加えて、新しい空のコンポーネントを作成することもできます。ローカル ページを更新する必要がある場合は、この空のコンポーネント ページにジャンプしてから、再びジャンプします。 beforeRouteEnter ガードを空白のコンポーネントに配置します。元のページ。以下の図に示すように、Vue3.X の更新ボタンをクリックして赤枠内の DOM を再読み込みし、対応する読み込みステータスを表示する方法を示します。 Vue3.X の scriptsetup 構文のコンポーネントのガードには o しかないので、

    Vue3 でアバターを選択してトリミングする方法 Vue3 でアバターを選択してトリミングする方法 May 29, 2023 am 10:22 AM

    最終的な効果は、VueCropper コンポーネントのyarnaddvue-cropper@next をインストールすることです。上記のインストール値は Vue3 用です。Vue2 の場合、または他の方法を参照したい場合は、公式 npm アドレス: 公式チュートリアルにアクセスしてください。また、コンポーネント内で参照して使用するのも非常に簡単です。必要なのは、対応するコンポーネントとそのスタイル ファイルを導入することだけです。ここではグローバルに参照しませんが、import{userInfoByRequest}from'../js/api を導入するだけです。 ' コンポーネント ファイルにインポートします。import{VueCropper}from'vue-cropper&

    Vue3 の再利用可能なコンポーネントの使用方法 Vue3 の再利用可能なコンポーネントの使用方法 May 20, 2023 pm 07:25 PM

    はじめに vue であれ、react であれ、複数の繰り返しコードに遭遇した場合、ファイルを冗長なコードの束で埋めるのではなく、これらのコードを再利用する方法を考えます。実際、vue と React はどちらもコンポーネントを抽出することで再利用を実現できますが、小さなコードの断片に遭遇し、別のファイルを抽出したくない場合は、それに比べて、React は同じファイル内で対応するウィジェットを宣言して使用できます。または、次のような renderfunction を通じて実装します。 constDemo:FC=({msg})=>{returndemomsgis{msg}}constApp:FC=()=>{return(

    DefineCustomElement を使用して Vue3 でコンポーネントを定義する方法 DefineCustomElement を使用して Vue3 でコンポーネントを定義する方法 May 28, 2023 am 11:29 AM

    Vue を使用してカスタム要素を構築する WebComponents は、開発者が再利用可能なカスタム要素 (カスタム要素) を作成できるようにする一連の Web ネイティブ API の総称です。カスタム要素の主な利点は、フレームワークがなくても、任意のフレームワークで使用できることです。これらは、異なるフロントエンド テクノロジ スタックを使用している可能性のあるエンド ユーザーをターゲットにする場合、または最終アプリケーションを使用するコンポーネントの実装の詳細から切り離したい場合に最適です。 Vue と WebComponents は補完的なテクノロジであり、Vue はカスタム要素の使用と作成に対する優れたサポートを提供します。カスタム要素を既存の Vue アプリケーションに統合したり、Vue を使用してビルドしたりできます。

    vue3+ts+axios+pinia を使用して無意味なリフレッシュを実現する方法 vue3+ts+axios+pinia を使用して無意味なリフレッシュを実現する方法 May 25, 2023 pm 03:37 PM

    vue3+ts+axios+pinia で無意味なリフレッシュを実現 1. まず、プロジェクト内の aiXos と pinianpmipinia をダウンロードします--savenpminstallaxios--save2. axios リクエストをカプセル化-----ダウンロード js-cookienpmiJS-cookie-s// aixosimporttype{AxiosRequestConfig , AxiosResponse}from"axios";importaxiosfrom'axios';import{ElMess

    See all articles