Heim  >  Artikel  >  Web-Frontend  >  Grundlegende Verwendung der Renderfunktion in Vue (ausführliches Tutorial)

Grundlegende Verwendung der Renderfunktion in Vue (ausführliches Tutorial)

亚连
亚连Original
2018-06-08 16:03:1112870Durchsuche

In diesem Artikel wird hauptsächlich die Verwendung der Renderfunktion in Vue vorgestellt. Jetzt teile ich ihn mit Ihnen und gebe Ihnen eine Referenz.

Renderfunktion

vue erstellt Ihr HTML anhand einer Vorlage. In besonderen Fällen kann dieses fest codierte Modell die Anforderungen jedoch nicht erfüllen und es müssen JS-Programmierfunktionen erforderlich sein. An diesem Punkt müssen Sie Render verwenden, um HTML zu erstellen.

Wann ist es angebracht, die Renderfunktion zu verwenden?

Beim gleichzeitigen Kapseln einer Reihe gemeinsamer Schaltflächenkomponenten verfügt die Schaltfläche über vier Stile (Standard). Erfolgsfehler). Zunächst fällt Ihnen vielleicht die folgende Implementierung ein:

 <p v-if="type === &#39;success&#39;">success</p>
 <p v-else-if="type === &#39;error&#39;">error</p>
 <p v-else-if="type === &#39;warm&#39;">warm</p>
 <p v-else>default</p>

, die völlig in Ordnung ist, wenn nur wenige Schaltflächenstile vorhanden sind. Stellen Sie sich jedoch vor, dass der Text in der Schaltfläche dies tun wird, wenn mehr als zehn Schaltflächenstile erforderlich sind entsprechend der tatsächlichen Situation bestimmt werden (z. B. kann der Text in der Erfolgsschaltfläche „OK“, „GUT“ usw. sein). Dann scheint die hartcodierte Vorlagenmethode sehr schwach zu sein. In solchen Situationen kann man sagen, dass die Verwendung der Renderfunktion die beste Wahl ist.

Schreiben Sie die Schaltflächenkomponente entsprechend der tatsächlichen Situation neu

Zunächst entspricht der von der Renderfunktion generierte Inhalt dem Inhalt der Vorlage Wenn Sie die Renderfunktion verwenden, müssen Sie sie zunächst in die .vue-Datei einfügen. Entfernen Sie das Vorlagen-Tag. Es bleibt nur die logische Ebene übrig.

export default {
 render(h) {
  return h(&#39;p&#39;,{
   &#39;class&#39;: {
    btn: true,
    success: this.type === &#39;success&#39;,
    error: this.type === &#39;error&#39;,
    warm: this.type === &#39;warm&#39;,
    default: this.type === &#39;default&#39;
   },
   domProps: {
    innerHTML: this.$slots.default[0].text
   },
   on: {
    click: this.clickHandle
   }
  })
 },
 methods: {
  clickHandle() {
   // dosomething
  }
 },
 props: {
  type: {
   type: String,
   default: &#39;default&#39;
  },
  text: {
   type: String,
   default: &#39;default&#39;
  }
 }
};

Nach dem komponentenbasierten Denken sind Dinge, die abstrahiert werden können, niemals fest in der Logik codiert. Die ClickHandle-Funktion hier kann je nach Schaltflächentyp unterschiedliche Logik auslösen, daher werde ich nicht auf Details eingehen.

Dann rufen Sie

<btn
 v-for="(btn, index) in testData"
 :type="btn.type"
 :text="btn.text"
 :key="index">{{btn.text}}
</btn>

in der übergeordneten Komponente mit jsx auf.

Ja, merken Sie sich die gleiche Art der Verwendung jedes Parameters und übergeben Sie die Parameter der Reihe nach Es ist wirklich zu viel Mühe. Dann können Sie jsx tatsächlich verwenden, um diesen langwierigen Prozess zu optimieren.

return (
 <p
  class={{
   btn: true,
   success: this.type === &#39;success&#39;,
   error: this.type === &#39;error&#39;,
   warm: this.type === &#39;warm&#39;,
   default: this.type === &#39;default&#39;
  }}
  onClick={this.clickHandle}>
  {this.$slots.default[0].text}
 </p>
)

Beispiel 2:

Wenn Sie auf das Schreiben ähnlicher Komponenten stoßen, müssen Sie der Einfachheit halber viel langen Code schreiben (Faulheit bringt Menschen voran). Daher sollten wir eine geeignetere Methode finden, um diesen Effekt zu erzielen.

 <body> 
    <p id="app"> 
      <mycomment :level="2"> 
        这是h2元素 
      </mycomment> 
    </p> 
  </body> 
  <script type="text/x-template" id="is"> 
 <p> 
  <h1 v-if="level === 1"> 
   <slot></slot> 
  </h1> 
  <h2 v-if="level === 2"> 
    <slot></slot> 
  </h2> 
  <h3 v-if="level === 3"> 
   <slot></slot> 
  </h3> 
  <h4 v-if="level === 4"> 
   <slot></slot> 
  </h4> 
  <h5 v-if="level === 5"> 
   <slot></slot> 
  </h5> 
  <h6 v-if="level === 6"> 
   <slot></slot> 
  </h6> 
 </p> 
</script> 
  <script> 
    Vue.component(&#39;mycomment&#39;,{ 
      template:&#39;#is&#39;, 
      props:{ 
        level:{ 
          type:Number, 
          required:true, 
        } 
      } 
    }) 
    var app =new Vue({ 
      el:&#39;#app&#39;, 
    }) 
   </script>

Zu diesem Zeitpunkt löst die Render-Funktion dieses Problem sehr gut. Sie hat ein Grundgerüst

 <body> 
  <p id="app"> 
    <render-teample :level="4"> 
      render function 
 
    </render-teample> 
  </p> 
 
</body> 
<script> 
Vue.component(&#39;render-teample&#39;,{ 
  render:function(createElement){ 
    return createElement( 
      &#39;h&#39;+this.level, 
      this.$slots.default 
      ) 
  }, 
   props: { 
  level: { 
   type: Number, 
   required: true 
  } 
} 
  var app=new Vue({ 
    el:"#app", 
 
  }); 
 </script>

Fügen Sie dann Ihrer Komponente hinzu, was Sie möchten. Der Stil erfordert, dass Ereignisse Fleisch und Blut werden

 <body> 
    <p id="app"> 
      <render-teample :level="4" > 
 
        <p class="jah" slot="myslot">render function</p> 
      </render-teample> 
    </p> 
 
  </body> 
  <script> 
  Vue.component(&#39;render-teample&#39;,{ 
    render:function(createElement){ 
      return createElement( 
        &#39;h&#39;+this.level, 
        { 
          &#39;class&#39;:{ 
            show:true, 
            hide:false, 
          }, 
          style:{ 
            width:&#39;200px&#39;, 
            height:&#39;400px&#39;, 
            background:&#39;red&#39;, 
          }, 
          attrs:{ 
            name:&#39;h-ex&#39;, 
            id:&#39;h-id&#39; 
          }, 
          props:{ 
            myprops:true, 
          }, 
           on: { 
          click: function(event){ 
            alert(this.num) 
          } 
        }, 
          nativeOn:{ 
            click:function(event) { 
 
              alert(1111) 
            } 
          } 
 
        }, 
        [ 
          this.$slots.myslot, 
          createElement(&#39;p&#39;,{ 
             domProps:{ 
            innerHTML:&#39;holle render&#39; 
          } 
          }) 
        ] 
 
        ) 
    }, 
     props: { 
    level: { 
     type: Number, 
     required: true 
    } 
  } 
});  
    var app=new Vue({ 
      el:"#app", 
      data:{ 
        num:110 
      } 
    }); 
  </script>

Hinweis: VNodes in der Einschränkungskomponente müssen eindeutig sein.

Es ist sehr mühsam, alle Elemente direkt unter einem createElement() zu schreiben und ist der Wartung nicht förderlich.

Normalerweise kann

var com1= createElement(&#39;p&#39;,&#39;item1&#39;);var
com2= createElement(&#39;p&#39;,&#39;item1&#39;);

return createElement('p',[com1,com2]) verwenden

In dieser Situation ist return createElement('p', [com1, com1])

Das Obige habe ich für alle zusammengestellt und hoffe, dass es in Zukunft für alle hilfreich sein wird.

Verwandte Artikel:

So implementieren Sie die automatische Recyclingverbindung für MySQL-Transaktionen in Node.js

So löschen Sie ein bestimmtes Objekt in einem JS-Array-Element

Führt im Detail die Wissenspunkte zu Versprechen in js ein

Das obige ist der detaillierte Inhalt vonGrundlegende Verwendung der Renderfunktion in Vue (ausführliches Tutorial). Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn