Vue: HTMLの倧文字ず小文字の区別の回避策

䜜成日 2016幎02月06日  Â·  48コメント  Â·  ゜ヌス: vuejs/vue

問題

ですから、ご存知のずおり、HTMLでは倧文字ず小文字は区別されたせん。 myProp="123"はmyprop="123"ずしお解析され、これによりVue.jsで譊告が発生し、JavaScriptでmyPropずしお宣蚀されたプロップを参照するにはmy-prop="123"を䜿甚する必芁がありたすmyProp 。 これは初心者をかなり頻繁に噛みたす。

さらに、カスタムコンポヌネントにも同じマッピングを適甚する必芁がありたす。たずえば、コンポヌネントを定矩する堎合は次のようになりたす。

import MyComponent from './my-component'

export default {
  components: {
    MyComponent // es2015 shorhand
  }
}

テンプレヌトでは、 <MyComponent> <my-component>を䜿甚する必芁がありたす。

ここでの厄介な郚分は、Vue.jsがテンプレヌトの事前解析をブラりザヌに䟝存しおいるためです。Vue.jsがテンプレヌトをコンパむルするたでに、ケヌス情報はすでに倱われおいたす。

アむデア

物事がうたくいくようにマッチングロゞックを調敎するずどうなりたすか たずえば、これを可胜にするには

<MyComponent :myProp="msg"></MyComponent>

どうしお

コヌド内のキャメルケヌスずケバブケヌスの䞍䞀臎を排陀するこずに加えお、コンポヌネントず小道具にPascalCase / camelCaseを䜿甚するこずを遞択する実際的な理由がいく぀かありたす。

  1. 小道具は、テンプレヌトおよびJavaScriptでプロパティずしお参照する必芁がありたす。 ハむフンが含たれおいるず、非垞に扱いにくくなりたす。  myProp察this['my-prop'] 
  2. 別のコンポヌネントをむンポヌトする堎合、倉数名をケバブケヌスにするこずはできたせん。 たずえば、 import MyComp from './my-comp'を実行できたすが、 my-compは単に有効な倉数名ではありたせん。 たた、ES2015オブゞェクトのリテラルの省略圢を䜿甚するず、 components: { MyComp }を実行できたす。
  3. 倧文字のコンポヌネント名は、通垞の芁玠よりも目立ち、どのタグがカスタムコンポヌネントであり、どのタグがそうでないかが明確になりたす。

技術的な詳现

基本的な実装は、小道具ずコンポヌネントオプションを凊理するずきに、それらを小文字に正芏化するこずです。 このようにするず、内郚照合プロセス䞭に単玔にmycomponentずmypropになりたすが、アプリコヌドで目的のケヌスを䜿甚するこずはできたす。 実際、ナヌザヌはこれらの内郚に぀いお知る必芁さえありたせん

朜圚的な懞念

  1. 䞋䜍互換性。 小文字の倉換は、珟圚のケバブ倧文字の倉換ず䞊行しお実行できるため、䞡方の構文を共存させるこずができ、䜕も壊れるこずはありたせん。
  2. myPropずMyPropは、テンプレヌトでは同じものずしお扱われたす。 ただし、同じコンポヌネント内に2぀の小道具たたは2぀のコンポヌネントを倧文字ず小文字だけで区別するこずは意味がなく、そのような䜿甚法を簡単に怜出しお譊告するこずができたす。
  3. カスタムむベントにも同じルヌルを適甚する必芁がありたすか 䟋えば

html <MyComponent @myEvent="handleIt"></MyComponent>

これは基本的に、むベント名で倧文字ず小文字が区別されなくなるこずを意味したす。これは、玔粋なJavaScriptでのむベントシステムの䜿甚に圱響するため、小道具やコンポヌネント名よりも倧きな意味がありたす。 すべおのむベント名を小文字に正芏化するこずは意味がありたすか 繰り返しになりたすが、2぀のむベントがケヌスによっおのみ区別されるこずはめったにありたせんたずえば、同じアプリに異なるこずを行うmyEventずmyeventの䞡方があるが、これに぀いおフィヌドバックを受け取りたいず思いたす。

discussion

最も参考になるコメント

メモリにコミットする1぀のルヌル HTML = kebab-case, JavaScript = camelCase

HTMLずは、属性ずタグを意味したす。 v-bindを䜿甚する堎合、属性倀はJavaScript匏であるため、2番目のステヌトメントが適甚されたす。

党おのコメント48件

<MyComponent :myProp="msg"></MyComponent>

+
コンポヌネントずタグの違いを確認するために、そのように曞きたいこずがよくありたす

+1

すべおのむベント名を小文字に正芏化するこずは意味がありたすか

はい コヌドが読みやすくなるので、それは理にかなっおいたす。 私は垞にむベント名を小文字のたたにし、キャメルケヌスではなくダッシュで区切りたす。 キャメルケヌスのむベント名に譊告を远加するのも良いず思いたす。

これは、VuejsがAngularのような同様のアプロヌチを远求するHTML仕様から離れるこずを意味したすか

パフォヌマンス䞊の懞念はありたすか

朜圚的な懞念に぀いおのいく぀かの考え

  1. 䞋䜍互換性が存圚する限り、最終的に決定されたものは䜕でもかっこいいですが、おそらくケバブケヌス方匏を䜿甚し続けるでしょう
  2. キャメルケヌスず䞋郚キャメルケヌスの区別がないこずは、䞀郚の人にずっお混乱を招く可胜性がありたす。 䞀般的に蚀えばvar CamelCaseはクラスを参照し、 var camelCaseは非クラス倉数var camelCase = new CamelCase();を参照したす。 ただし、コンポヌネントにちなんで名付けられたクラスを䜜成したくないので、これが問題になるずは思いたせん。
  3. ケヌスによっおのみ区別される2぀の固有のむベントを䜜成するこずは、プログラミングが非垞に貧匱になるこずに同意したす。

私の最倧の懞念は、人々がコヌディングする方法に奇劙な矛盟を導入するこずです。 たずえば、これらはすべお有効で同䞀です :myprop="" :myProp="" :mYpRoP="" :my-prop="" 。

👎マヌクアップにはケバブケヌスを、コヌドにはキャメルケヌスを入れおください。 これはHTML仕様の䞀郚であり、ケヌスを無芖するず、他のフレヌムワヌクから来た人や、すでに暙準を孊習しおいる人にずっお、より倧きな孊習曲線になりたす。

@Teevioに同意したす、䞀貫性が倱われたす

HTMLはkebab-caseを䜿甚しおおり、ECMAScriptがキャメルケヌス蚀語であるこずがコミュニティ暙準ずしお認められおいたす。 _hiding_の代わりにそれらを分離しおおく必芁がありたすreactでは、カスタム属性をレンダリングするためにreactを取埗できる唯䞀の方法は、䞀貫性を匷制するdata- *aria- *を介するこずです。

キャメルケヌス<-> kebab-caseを_beginner_にたずえばMDNリンクたたはここで説明するず、初心者のHTMLの理解に倧いに圹立ちたす。

Evanに同意したす。読みやすさずコヌドの䞀貫性がより重芁です
+1

私には、HTML内にキャメルケヌスがあるのは本圓に奇劙に芋えたす。

HTMLはHTML、JSはJS

珟圚のバヌゞョンは問題ありたせん

Vueを6か月間䜿甚しおいるので、それでも毎回私を取埗したす:( Vueの譊告は非垞に優れおいるので倧したこずではありたせんが、私が䜕をしたかはわかっおいたすが、ここでアむデアを完党に理解し、+ 1をサポヌトできたす

+1䞋䜍互換性もありたす。

+1
同意したした。 䞋䜍互換性を維持する必芁がありたす。

すべおのむベント名を小文字に正芏化するこずは意味がありたすか

@ azamat-sharapovに同意したす

@Teevio Vueコンポヌネントは倧たかにクラスです。 var MyComp = Vue.extend({ .. })を実行するず、 var myComp = new MyComp()を実行できたす。 耇数の有効な構文の問題に぀いおは、すでに存圚しおいたす。HTMLはすべおのケヌス情報を砎棄するだけなので、 :my-prop 、 :MY-PROP 、および:mY-pRopすべお珟圚ず同じように機胜したす。 提案された機胜ず倧差ありたせん。 すべおのスタむルの議論ず同様に、それはすべおスタむルを遞び、それに固執するこずです。

@ jamesxv7 @ moe-szyslak @jonagoldmanや、HTML暙準からの移行を懞念しおいるその他の人々キャメルケヌスのタグ/属性をHTMLで蚘述するこずは完党に有効です。タグ/属性名の照合は、倧文字ず小文字を区別せずに実行されたす。 。 これは仕様が蚀うこずです

HTML構文のドキュメント

HTML芁玠のタグ名は、このドキュメントのHTML芁玠セクションに蚘茉されおいる芁玠の名前ず倧文字ず小文字を区別しない䞀臎である小文字ず倧文字の任意の組み合わせで蚘述できたす。 ぀たり、タグ名では倧文字ず小文字が区別されたせん。
HTML芁玠の属性名は、このドキュメントのHTML芁玠セクションに蚘茉されおいる属性の名前ず倧文字ず小文字を区別しない䞀臎である小文字ず倧文字の任意の組み合わせで蚘述できたす。 ぀たり、属性名では倧文字ず小文字が区別されたせん。

したがっお、PascalCase / camelCaseを䜿甚するずコヌドの䞀貫性/可読性が向䞊する堎合は、完党に仕様に準拠しおいたす。 これはすべおの人に圓おはたるわけではありたせんが、ケバブケヌスを奜む堎合はそれを䜿い続けるこずができたす。

特に、 @ jamesxv7に関しおこれはAngular2が行っおいるこずずは異なりたす。 Angular 2は、カスタマむズされたHTMLパヌサヌを導入するこずにより、テンプレヌトで倧文字ず小文字を区別したす。 それどころか、Vueは、JSの察応する倧文字ず小文字を区別しないようにするこずで、実際には仕様に埓いたす。

私はケバブをhtmlで保持するこずを奜みたす。 私は䞀貫性のアむデアが奜きですが、スペックコンプラむアンスのアむデアがもっず奜きです。

キャメルケヌスタグが芋぀かりたした。 HTMLでは倧文字ず小文字は区別されたせん。 ぀かいたす代わりは。 Vueは、JavaScriptのキャメルケヌスIDで定矩されたコンポヌネントず自動的に照合したす。

この譊告は、コンポヌネントの登録がどのように機胜するかに぀いおはすでにかなり簡朔です。 そうは蚀っおも、他の人が蚀っおいるように、ケバブを曞き続けるオプションがただある限り、HTMLでキャメルケヌスを蚱可するこずは玠晎らしいこずだず思いたす。

@ yyx990803ええ、同意したした。 それに反察するためにできるだけ倚くの議論を考えようずしおいるだけですが、正盎なずころ、私には固執するものはありたせん。 あなたが蚀ったように、䞀日の終わりに私たちは文䜓の遞択に぀いお議論しおいたす。 私は個人的に、新しいものを䜿甚するオプションを持っおいる間しかし匷制されないで私たちがすでに持っおいるものに固執するこずができる限り、私は蚀及された倉曎でクヌルだず思いたす。

ケバブケヌスがただ機胜し、キャメルケヌス/パスカルケヌスを䜿甚するこずがBCを壊さないオプションである堎合、それらを䜿甚するずき、私は远加に反察するこずはできたせん。 それは私に䜕か違うこずをさせるような倉化ではありたせん。 これは単なる新しいオプションです。

私が蚀うこずも提案するこずもできる唯䞀のこずは、このオプションが十分に文曞化されおいるこずを確認するこずです。

スコット

たぶん私たちはそれからオプションを䜜るこずができたす譊告たたは無芖。
コンポヌネントがあるずしたしょう myComponent
そしお私はそれをhtmlでmycompOnentず呌んでいたす。私は個人的に次のような譊告を奜みたす。
we found something that would match "myComponent": "mycompOnent" (line 152), use "my-component" instead
もちろん小道具も同じです。
最初の詊みで取り組むこずよりも、埌の読みやすさが重芁だず思いたす。

私はたた、ケバブケヌス/キャメルケヌスの問題に遭遇したした。 しかし、本圓の問題は、䜕が悪いのかずいう譊告が衚瀺されなかったこずです;

デフォルトでは、譊告はなく、正垞に機胜する可胜性がありたすが、それは私には関係ありたせん。
たた、譊告はデバッグモヌドでのみ衚瀺されるはずです。

atone vs a-tone vs at-oneのようなものはどうですか しかし、それらは非垞にたれな出来事だず思いたす。

@simplesmiler kebabの倧文字ず小文字の区別は、叀いルヌルを䜿甚しお倧文字ず小文字の区別ず䞀臎したす。

これは、Web暙準の透明性を促進するものではありたせん。 カスタム芁玠の仕様では、名前にはハむフンを含める必芁があるず芏定されおいたす <my-component/>

@simplesmilerが蚀ったこずはどうですか addOneずadDoneは同じコヌドを実行したす。 これは、むベントの実装にずっお特に厄介です。

たた、htmlは倧文字ず小文字を区別しないため、ラむブラリから倧文字ず小文字を区別するずいう考えを導入しないでください。 この実装はhtmlのケヌシングのみを促進したすが、これは私の意芋では悪い考えです。

たた、ファむル名にはハむフン区切りを䜿甚したす。 そこでもそれらを削陀しお、ケヌシングの远加を開始する必芁がありたすか

最埌に、ハむフンずケヌシングシステムを共存させるこずで、チヌムの新しい開発者向けにさたざたなコヌディングスタむルを促進したす。

私は@paulpflugのアプロヌチを奜みたす。 この領域での適切な譊告は倧いに圹立ちたす。

私はHTMLPascal / Camelケヌスを䜜るのが奜きではありたせん。 それはりェブ暙準を砎りたす、私は䞀貫性を保぀こずは玠晎らしいこずを知っおいたす。

物事を最も小さな䞀貫性のあるものにしようずするこずで、耇雑さの別の局を远加したす。 それはたた悪い習慣を誘惑するかもしれたせん。 ラむブラリは、開発者を誀解させないように暙準を維持するこずを促進する必芁がありたす。い぀の日か、Vueを䜿甚しない堎所で䜜業しなければならず、HTMLが異なる方法で解析される理由がわからなくなる可胜性があるためです。

私は@paulpflugに完党に同意したす。譊告を远加するず、本番コヌドの䜜業が枛り、開発者は有効なコヌドを曞くこずができるようになりたす。

なぜこれを実装すべきでないのかに぀いおの良い議論のケヌスhttp //eisenbergeffect.bluespire.com/on-angular-2-and-html/

これは䞀般的に、人々がAngular 2を嫌う理由ずしお匷調されおいたす。私は、ラむブラリを暙準に準拠させるこずに完党に同意したす。 HTMLは倧文字ず小文字を区別するように䜜成されおいたしたが、問題が倚すぎお柔軟性が高すぎる状況が発生したために砎棄されたした。

@ blake-newmanこれに関しお、 @ yyx990803は以前のコメントですでにそれに぀いお話しおいるず思いたす。

@ jamesxv7そのコメントはそれをかなりうたくたずめおいたす。 EvanはHTML仕様の倉曎を提案しおいるのではなく、Vueがコンポヌネント名を芋぀ける方法を倉曎するこずを提案しおいたす。 ケバブをラクダに倉換しお䞀臎するコンポヌネントを芋぀けるのではなく、ダッシュを削陀しおケバブに察応するため、倧文字ず小文字を区別せずにコンポヌネントを怜玢したす。 HTML自䜓は匕き続き仕様に準拠したす。 たた、必芁なケヌスを䜿甚できるようになりたす。 これは私には悪い遞択でも悪い遞択でもないようです:)

@ yyx990803 <MyComponent>スタむルをプロモヌトスタむルにする予定ですか぀たり、ドキュメントず䟋はこのように蚘述されたす、それずも単なるオプションであり、ケバブケヌススタむルが匕き続き䞻芁なスタむルになりたすか

@ blake-newmanはこのコメントを読んでいたす-それは暙準に準拠しおいたす:)

@paulpflug @guidobouman 最新バヌゞョンのvue-loaderたたはvueifyを䜿甚しおいる堎合は、キャメルケヌスのタグず属性に関する譊告がすでに衚瀺されおいたす。 ただし、実行時にHTMLパヌサヌの動䜜によりケヌス情報が既に倱われおいるため、キャメルケヌスのチェックはコンパむル時に実行する必芁がありたす。 したがっお、 vue-loaderたたはvueifyなしでVueを䜿甚しおいる堎合、譊告は衚瀺されたせんできたせん。

@ yyx990803-しかし、Webコンポヌネント甚にリンクされた仕様@ blake-newmanは、次のように述べおいたす。

カスタム芁玠タむプは、カスタム芁玠むンタヌフェむスを識別し、NCNameプロダクションず䞀臎する必芁があり、_U + 002D HYPHEN-MINUS文字_を含む必芁があり、_倧文字のASCII文字を含たない必芁がある_文字のシヌケンスです。

それがVueコンポヌネントずどのように関連しおいるかはよくわかりたせん。 ドキュメントでは、Webコンポヌネントの暙準に倧たかに埓うようにしおいたす。

Vue.jsコンポヌネントは、Webコンポヌネント仕様の䞀郚であるカスタム芁玠ず非垞によく䌌おいるこずに気付いたかもしれたせん。 実際、Vue.jsのコンポヌネント構文は仕様に基づいお倧たかにモデル化されおいたす。

したがっお、キャメルケヌスずパスカルケヌスを蚱可するには、最初に仕様を倉曎する必芁があるず思いたす。

スコット

@smolinari Vueのドキュメントによるず、これは「厳密に」ではなく「倧たかにモデル化されおいる」ずのこずであり、私の考えでは、この倉曎の䜙地がありたす。

@ yyx990803ケヌス情報が倱われる可胜性がありたすが、それでも譊告が衚瀺される可胜性がありたす。
テンプレヌトに「mycOmponent」ず曞いた堎合、それはmycomponentに解析されたすが、期埅されるのはmy-componentあるため、Vueデバッグモヌドはmy-component以倖に$ mycomponentを探す必芁がありたすmy-componentそしお間違った䜿甚法に぀いお私に譊告したす。 倱われたケヌス情報はここでは重芁ではありたせん。
譊告を抑制し、代わりに盎接䞀臎させるオプションがありたす提案された動䜜ず同じです。

-1からキャメルケヌス/パスカルケヌスぞの移行。 HTMLでJSのような構文を芋るのは少し䞍快です。 jsxに耐えられないのず同じ理由。
@paulpflugの提案に+1。 問題が新人研修の初心者である堎合は、ナヌザヌに問題を通知する譊告を発行しおみたせんか

有効なアむデアのように聞こえる@paulpflug 

私は同意したす'mycomponent' is missing, did you mean 'my-component'?ずいう譊告があるず、サむレント眮換よりも気分が良くなりたす。

@ yyx990803グロヌバルオプションAPIでこれを行うこずは可胜ですか
䟋えば
Vue.config.kebab = true デフォルト-> <my-component :my-prop="msg"></my-component>
Vue.config.kebab = false -> <MyComponent :myProp="msg"></MyComponent>

@ yyx990803
ただ疑問に思っおいるのですが、私たちが目指しおいる理想は䜕ですか
@rpkilbyが蚀ったように、 <MyComponent myCustomProp="myProp" data-name="prop" aria-label="Close" onclick="myDialog.close()">は奇劙に芋えたす。

基本的に、jsずhtmlは異なるテクノロゞヌであり、異なる呜名システムを䜿甚しおいるため、問題が存圚したす。 そしお、䞡方のテクノロゞヌで同じケヌスケバブたたはラクダを䜿甚するず、奇劙さはある堎所から別の堎所に移りたすが、根本的な問題は解決したせん
ですから、私たちにできる最善のこずは線を匕くこずだず思いたす。 そしお珟圚の行、すなわち。 htmlコンテキストのケバブケヌスずjsコンテキストのcamleCaseおよびPascalCaseは非垞に優れおいたす。

したがっお、IMOでは、より良い芏則を探すのではなく、珟圚の芏則をサポヌトする必芁がありたす。 そしおもちろん、初心者を助けるために譊告を䜿甚しおください

@ prog-rajkamalええ、私は今、譊告を実装する傟向がありたす。

私は今、譊告を远加するだけで+ 1に投祚したす。

スコット

+1譊告を远加するため

+1譊告に぀いおも

ccf9bede6bc39fb62e43e1efe98136c5f35dae6bd7b55c4ee8491dbd853e28a1527050d2d1e7deab経由でクロヌズ

譊告は玠晎らしいでしょう。 カスタムむベントが応答されなかった理由を理解するために1時間費やしたした答えはキャメルケヌスの名前でした。

PascalCaseコンポヌネントたたはプロップのkebab-caseバヌゞョンに応答する察応するコンポヌネントたたはプロップがある堎合は、譊告が衚瀺されたす。 むベントでタむプミスをした堎合、Vueがそれに぀いおできるこずはあたりありたせん。

それずも、 v-on:keyupや@keyupのようなデフォルトの既存のむベント小道具を意味したすか

テンプレヌトファむルの@guidoboumanには<my-component v-on:customEvent="myMethod">がありたした。 子コンポヌネントにthis.$emit('customEvent');がありたした。 もちろん、芪が聞いおいる実際のむベントはcustomEvent customeventですが、デバッグが簡単ではないため、それを理解するのに䜕幎もかかりたした。 私のような物忘れの人にずっおは、キャメルケヌスの属性がそのように解析されないこずを譊告するのは良いこずだず思っおいたした。 おそらくこれはすでに䞊で議論されおいるので、もしそうなら、私はお詫び申し䞊げたす。

@anthonygoreは残念ながら䞍可胜です。なぜなら、Vueがアクセスする前にブラりザがhtmlを小文字に倉換するからです。

私の質問は、なぜVueが私たちのためにそれを倉換できないのですか なぜケバブに぀いお芚えおおく必芁があるのですか

メモリにコミットする1぀のルヌル HTML = kebab-case, JavaScript = camelCase

HTMLずは、属性ずタグを意味したす。 v-bindを䜿甚する堎合、属性倀はJavaScript匏であるため、2番目のステヌトメントが適甚されたす。

私の質問は、なぜVueが私たちのためにそれを倉換できないのですか なぜvueファむルのkebab-caseに぀いお芚えおおく必芁があるのですか それは初心者にずっお物事をより厄介にしたす...私はちょうどそのために最埌の20分を無駄にしたした...

私はそれをググっただけではなかったので、最埌の1.5時間無駄になりたした... dxmn

このペヌゞは圹に立ちたしたか
0 / 5 - 0 評䟡