Vue vs React vs Angular

■ このスレッドは過去ログ倉庫に格納されています
2018/12/21(金) 21:37:36.86ID:NZqrEm960

実際どうなん?
Vue
https://jp.vuejs.org/
React
https://reactjs.org/
Angular
https://angular.io/
VIPQ2_EXTDAT: default:vvvvv:1000:512:----: EXT was configured
2019/03/06(水) 08:55:10.29ID:lkGca0kGd
そういう意味ならJSFがある
2019/03/06(水) 22:12:48.11ID:oR6mPeK70
スレ違いかもしれないけど、たまには気分転換にvueとかreactとかの話題はどうかな?
2019/03/06(水) 23:50:49.60ID:1pbO3u+T0
Reactの仮想DOMとかいうのが未だに分からん
HTMLをオブジェクトの木構造にしないで文字列のままで握ってるってことでOK?
2019/03/07(木) 02:22:49.29ID:/M0SxS0j0
>>710
違う。
メモリ上に持つ実DOMの劣化レプリカ。
そして利用者は実DOMはイジらず、劣化レプリカの方をイジる。
angular react vueなどの仮想dom系のライブラリが劣化レプリカの変化から、最小の実dom操作を計算して適用。
昔は人がやってた仕事がライブラリに委譲された格好。
712デフォルトの名無しさん (アウアウカー Sa6f-P5ld)
垢版 |
2019/03/07(木) 02:44:23.97ID:FkBKY4Sxa
HTML のタグを javascript のオブジェクトで単純に表現しただけのもの。react であれば、createElement 関数で生成されるオブジェクトのことになる。で、そのインスタンスの変化に合わせて実際の HTML に反映してくれる。
2019/03/07(木) 03:07:16.07ID:7lOwuU310
>>711
HTMLElementじゃないけど似たようなのをツリーで持ってるのか
HTMLElement.clone(true)でページ全体のクローンを作って、
それをDOM操作してからdocument.documentElementに差し替えるのかと思ってた

単純にFragment使ってDOM操作するより速いのか気になる
2019/03/07(木) 07:22:52.72ID:rioBJ/QG0
やってることは実DOMの変更をバッファして
変更タイミングをいい感じでやってくれてるってことじゃないの?
2019/03/07(木) 08:43:40.11ID:oVD+pZgg0
>>713
> 単純にFragment使ってDOM操作するより速いのか気になる
速くならない

× 仮想DOMは速い
○ 仮想DOMは遅くならないように頑張っている

速い速い詐欺のどこが詐欺かって言うと
何より速いかを書いてない所

仮想DOMの最初の発想は、実DOMと同じような内容をメモリ内に保持しておいて、
仮想DOMから実DOMをすべて生成しよう!という発想

もともとはゲームから来ている発想。
ゲームは1秒間に60回ぐらいメモリ内容を元に画面全体を書き換えている。

変更があるたびにDOM全体を書き換える。
当然DOMでそんなことやったら遅いって思うよな?
そこで差分を計算して変更があった所だけ書き換える

つまり

○ 仮想DOMは画面全体を書き換える発想だが、差分だけを書き換えるから、画面全体を書き換えるより速い

と言ってるだけ

そもそも実DOMを操作しているときは、必要最小限のものしか書き換えないので
仮想DOMが差分(必要なところ)だけ書き換えるといっても、それ普通ですよね?という話でしか無い。
むしろ仮想DOMは実DOM操作よりメモリ使用量は増えるし、差分計算の分遅くなってる。
2019/03/07(木) 08:54:40.49ID:NrdLaj5lM
実DOM操作自体の速度は当然変わらない。
人が書くか仮想DOMライブラリがやるかの違いだけ。
ライブラリは実DOM操作の回数を減らすため仮想DOM持って計算頑張ってるだけ。
「DOM操作が速くなる」とか言ってるのは全部嘘。
2019/03/07(木) 09:00:44.74ID:oVD+pZgg0
> 人が書くか仮想DOMライブラリがやるかの違いだけ

人は「全体の中から差分を計算してそこだけ書き換える」
なんてことはやってないですよ。

人はある処理の中でDOMのどの部分を書き換えたいかを
知っているので、必要最小限のDOM操作しか変更しない
(クソプログラマなら全部消して作り直すとかいう無駄してるかもしれんが)

その全部消して作り直すっていうのをやろうという発想が仮想DOMで
遅くならないように差分を計算して、必要最小限のものだけ変えよう。というふうに
自分で遅くしておいて、自分で改善した(速くした)って言ってるだけなんです
718デフォルトの名無しさん (ワッチョイ a701-w6xA)
垢版 |
2019/03/07(木) 09:10:38.72ID:FKXLE38I0
速度に関しては実dom直接操作よりは遅い。その辺はググればすぐ出るから見とくと良い。ただおかけでリアクティブという大きなメリットを手に入れた。ページ切り替えさえ差分更新してspaも出来る訳で、レスポンスは全体的に向上する。
2019/03/07(木) 09:19:40.62ID:NrdLaj5lM
人はある処理の中でDOMのどの部分を書き換えたいかを
知っている(担当の頭の中にある)ので、必要最小限のDOM操作しか変更しない。

人の頭に依存しないように機械的に
最小限のDOM操作を特定・適用までやろうとしたのが仮想DOM系ライブラリ。

人が脳のリソース使ってやるか仮想DOMライブラリが自動でやるかの違いだけ。
2019/03/07(木) 09:27:16.66ID:oVD+pZgg0
ここで忘れてはいけないのは

> ただおかけでリアクティブという大きなメリットを手に入れた。ページ切り替えさえ差分更新してspaも出来る訳で、レスポンスは全体的に向上する。

リアクティブは本当に必要なのか?
SPAは本当に必要なのか?

ということ

世の中の多くのソフトウェアはリアクティブなんか使っていない。
それでまともに動く製品を作れている。

SPAもそうだ。ユーザーにとってはシングルページだろうが、マルチページだろうが関係ない。
シングルページだとページごとに分担して開発するのが難しくなる。
マルチページなら、ページごとに別の人が担当して開発するのが楽である。
721デフォルトの名無しさん (ワッチョイ a701-w6xA)
垢版 |
2019/03/07(木) 09:52:31.84ID:FKXLE38I0
リアクティブのメリットは複雑な入力フォームが分かりやすい。pc購入する際のカスタマイズ画面なんかが良い例。以前と比べて工期の短縮できて保守が凄く楽。部分的な導入も出来るからvueで試せば分かる。フォーム周りは圧倒的にリアクティブが良い。
2019/03/07(木) 09:57:57.50ID:oVD+pZgg0
>>721
リアクティブがやりやすいんじゃなくて、
以前のやり方がだめだっただけでは?
2019/03/07(木) 10:01:54.73ID:oVD+pZgg0
>>721
その例ってこんな程度でいいの?

https://www.dell.com/ja-jp/shop/serviceselection/cai401cspgmt04oo3ijp?selectionState=&;cartItemId=
https://www.dospara.co.jp/5goods_pc/pc_bto.php?h=d&;f=d&m=pc&tg=13&mc=8374&sn=3619&vn=1&lf=0
724デフォルトの名無しさん (ワッチョイ a701-w6xA)
垢版 |
2019/03/07(木) 10:43:49.16ID:FKXLE38I0
>>722
ある入力に対して別の複数の要素が動的に変更される場合、リアクティブだとcomputedプロパティで自動的にuiに反映されるよう設定するのがとても楽。これjqueryだと面倒だしミスも増える。

>>723
この程度って。。結構大変だよ。条件も頻繁に変わるだろうし。
2019/03/07(木) 10:54:23.39ID:oVD+pZgg0
>>724
やっぱり使い方がわかってないだけだな

ある入力に複数の要素が動的に変わるならば、
その要素の親に、クラスをつけて、
あとはCSSで、それ以下の要素の表示、非表示状態を切り替えるだけだよ

jQueryだと最低3行。あとはCSSでおしまい。
2019/03/07(木) 11:05:05.80ID:oVD+pZgg0
前から思ってるんだけど(自称)プログラマって
HTML/CSSは嫌いです。出来ません。って人多いよね。

それを毛嫌いしてるというか、CSSなんてデザイナが使うもんだろ
馬鹿にしている感じで、俺出来ないから(笑)みたいな感じで言う。
恥ずかしいと思ってないんだろう。

多くのDOM要素はCSSを使って単に見えなくしたり表示したりすればいいだけなんだが
(プログラマとしての技術力不足で)CSSを使えないから
JavaScriptでいちいち作り出したり削除するしか出来ないんだよな
2019/03/07(木) 16:04:46.19ID:uSXw2eVGM
>>720
要件を勝手に決めつけないでよ
客からユーザーから代弁して喋るなら何だって言いたい放題じゃん
2019/03/07(木) 17:22:06.09ID:oVD+pZgg0
>>727
だったら要件を決めつけてメリットだって言わないでくれ
要件によってはデメリットなんでしょ?
2019/03/07(木) 18:14:20.13ID:mVKClUMzd
簡単にいい感じのページが作れるのはメリットの一つだと思うけどな。
例えばpythonは成果物に関してはCに対するメリットはないけど簡単に作れるから人気なわけで。
2019/03/07(木) 21:20:18.65ID:bV0vVOYFM
>>728
いやだからさ
「要件次第」で済む話を何度掘り返すのよ
スレタイ見てスレチだと思わないの?
2019/03/07(木) 22:37:46.71ID:cPei42ec0
>人はある処理の中でDOMのどの部分を書き換えたいかを
>知っているので、必要最小限のDOM操作しか変更しない
>(クソプログラマなら全部消して作り直すとかいう無駄してるかもしれんが)

クソプログラマは全部消して作り直す
賢いプログラマはどうDOM操作すれば最適かなどという生産性のない仕事をフレームワークに任せる
2019/03/07(木) 22:42:13.25ID:N/E4f3Caa
>>725
管理対象の状態数が増えるのがやだ
状態はできるだけ純粋で論理的な形式で管理したい
という要求がスッポリ抜けてるね
2019/03/07(木) 22:55:10.59ID:Tta1cO7U0
GoogleもこれからPWAで攻めてきそうだけどね
2019/03/07(木) 22:59:25.97ID:Y4GuSkwR0
>>732
CSSは宣言型なので、
管理対象の状態数が減るんですよ
2019/03/07(木) 23:00:35.30ID:Y4GuSkwR0
>>731
> 賢いプログラマはどうDOM操作すれば最適かなどという生産性のない仕事をフレームワークに任せる

もっと賢いプログラマは、必要なことしかしないんだよ。
Aを変えたいなら、Aだけを変えましょう。ってね
2019/03/07(木) 23:01:50.74ID:N/E4f3Caa
>>734
domの状態数は多すぎるよ
2019/03/07(木) 23:04:15.56ID:N/E4f3Caa
>>735
見えるか見えないかみたいな、ただの論理値を管理したいだけなのに
それをわざわざdom/cssの物理構造に縛られた迂遠な方法で管理するのは確かに賢くないな
2019/03/07(木) 23:09:46.27ID:oTfLqBj1a
まあ本当に賢いプログラマ達はフロントエンドなんてやらないんですけどね
2019/03/07(木) 23:11:14.61ID:N/E4f3Caa
>>738
それは同意
2019/03/07(木) 23:12:46.45ID:Y4GuSkwR0
AしたらBを変えたいんですが?

Reactを使うと・・・・



ではBを変数に結びつけましょう。
そういうコードを書き換えます。
そうすれば変数を変えればBも変わります。
おっと待ってください。
そのために変数をSTOREに入れなければいけません。
STOREからとってきて、STOREを更新・・・いえいえいけません
新しくオブジェクトを作るのです。
そのオブジェクトを作るために〜
オブジェクトを変更する関数を用意するのです!
その関数を作るための、はい、メッセージが必要ですね。

えぇ、ですからね、AしたらAction Creatorを使ってactionを生成して
Storeに対してactinonをDispatchして、ReducerがDispatchに反応して
actionタイプから今の状態から新しい状態を変更すれば、
ほら簡単にBが変わるんです!

え?普通にAイベントのハンドラでBを変えればいいじゃないかって?

ムキー!
2019/03/07(木) 23:14:47.91ID:Y4GuSkwR0
>>737
> それをわざわざdom/cssの物理構造に縛られた迂遠な方法で管理するのは確かに賢くないな

だから、CSSを使うといいですね。
JavaScirptからは親となる要素にクラスを設定するだけなんですよ。
簡単。DOMがどういう構造になっているかなんて関係ない。

あとはデザインを作る人が、その状態でどう表示したいかを作るだけなんです。
742デフォルトの名無しさん (オッペケ Src7-EzoF)
垢版 |
2019/03/07(木) 23:23:16.99ID:jEbiMY7gr
fluxの概念を取り入れたらものすごく簡単に状態管理ができる!
って本にもキータにもみんな書いてるんだけど?
2019/03/07(木) 23:23:24.15ID:N/E4f3Caa
>>741
私が管理したいのは見えるか見えないかという2つの純粋な状態なんです
ブーリアンで済むものをわざわざスタイルシートやらクラスなどといった迂遠な方法で管理したくないんです
それはまるで物体から投影された影に干渉して、もとの物体を操ろうとするような愚かなことです
744デフォルトの名無しさん (ワッチョイ ff3d-g2Ga)
垢版 |
2019/03/07(木) 23:58:03.68ID:tvHZX0HA0
どっちも極端じゃないか?
バインディングならjQueryよりはVueやReact使った方がいいと思うけど、
表示非表示やアニメーションならcss側でやった方がいいと思う。
2019/03/08(金) 00:38:11.11ID:kMybevyH0
仮想DOMとJQueryの世代の重要な違いとして
セレクタやDOM操作を一切したくないという発想があるのではないだろうか
JSXでHTMLをそのまま書くのもセレクタを使いたくないからだろうし
2019/03/08(金) 00:47:24.38ID:N66/0TP00
実DOM では、IO 操作が遅い

仮想DOMでは、JavaScript内の操作だけだから、速い
2019/03/08(金) 01:03:32.93ID:kMybevyH0
それはHTMLFragmentがあれば事足りる話っしょ
2019/03/08(金) 10:15:11.65ID:jbQifWXg0
>>743
> ブーリアンで済むものをわざわざスタイルシートやらクラスなどといった迂遠な方法で管理したくないんです

だからセレクタのクラスはブーリアンなんだよ

ある要素に、flagクラスというブーリアン値が
立っているか、立っていないか
2019/03/08(金) 10:16:08.10ID:jbQifWXg0
>>746
仮想DOMを実DOMに反映させる所で
大幅に遅くなるんだよ
750デフォルトの名無しさん (ワッチョイ a701-w6xA)
垢版 |
2019/03/08(金) 11:13:41.54ID:/TYC9ex30
>>725
リアクティブだと一行で終わるよね。単に変数をfalseにするだけ。ミスしようがない。うーん、なんでjQueryやcssにそこまでこだわるかね。みんな散々苦労してきた末のスマートな解決方法が仮想domでありリアクティブなんだけどな。一度試してみたら?食わず嫌いしないでさ。
2019/03/08(金) 11:17:51.39ID:jbQifWXg0
> リアクティブだと一行で終わるよね。単に変数をfalseにするだけ。

終わらねーよw 変数みてデザインを変えるコードを書かないとだめだろ
752デフォルトの名無しさん (ワッチョイ a701-w6xA)
垢版 |
2019/03/08(金) 11:28:53.74ID:/TYC9ex30
>>751
そう、まさにそこがキモ。ロジックとuiが綺麗に分離されてる。
Falseになった結果どうなるかはuiの管轄でcssやdomとは本来無関係なんだよ。jQueryはそこが分離できない。
2019/03/08(金) 11:35:19.90ID:jbQifWXg0
> そう、まさにそこがキモ。ロジックとuiが綺麗に分離されてる。

別れてないよ。JavaScriptファイルを編集してもらわないといけない

CSSだと「プログラマの俺は、この要素のクラスを設定するだけです。
デザイナーさん、あとはかっこいいデザインを作ってください!」といえる

デザイナーはJavaScriptファイルを一切触らずに
デザインを作り込むことができる。
2019/03/08(金) 11:40:36.85ID:jbQifWXg0
jQueryで書く場合はこんな感じだね。

$('.my-component [name="switch"]').change(function() {
 $(this).closest('.my-component').toggleClass('active', this.checked);
});

コンポーネントの中にある名前がswitchのチェックボックスがONになれば
そのコンポーネントがactiveになって、
そのコンポーネント以下のデザインがactive用に変わる

DOMの構成がどうなっているか一切気にする必要がないんだよ。
755デフォルトの名無しさん (ワッチョイ a701-w6xA)
垢版 |
2019/03/08(金) 13:46:44.51ID:/TYC9ex30
>>753
デザイナはスクリプトをいじる必要全くない。例えば
<div v-if=“isShow”></div>
というテンプレに対してスクリプトでは、
isShow=false
とするだけ。これだけでリアクティブになる。どっちがミスが少ないか分かるだろう?
756デフォルトの名無しさん (ワッチョイ a701-w6xA)
垢版 |
2019/03/08(金) 13:50:05.53ID:/TYC9ex30
すまん途切れた。どっちがミスが少ないか、分業しやすいか分かると思うんだが、どうかね?
2019/03/08(金) 13:55:12.54ID:jbQifWXg0
> <div v-if=“isShow”></div>

すいませーん、デザイナーさーん。
今度から、v-ifってのを覚えてくださいー。

いままでCSSで表示切り替えしてたでしょー?
それ、今度からやめてくださいねー。

リ・ア・ク・ト。やり方覚えてくださいね。
やり方変えたんですよ。こっちのやり方にね。
え?他にも色々ありますよ。勉強してくださいー。
2019/03/08(金) 13:57:57.43ID:kMybevyH0
Javascript(Data/Model) - Javascript(UI/DOM) - HTML/CSS
デザイナーが真ん中の層を如何にやるのかという話だろう
HTML内にv-bindとか属性で埋め込むのもJQueryを書かせるのも同じこと
仮想DOMのフレームワークによって真ん中が無くなったとは言えないだろうし
2019/03/08(金) 14:02:22.95ID:jbQifWXg0
jQueryはプログラマが使って、
イベントに反応してクラスを変更するだけなんだよ。

あとはDOMの構造とかCSSとか完全にデザイナーに
任せることができる。

デザイナーはデザイナーの流儀でやれるし、
JavaScriptフレームワークの流儀を押し付けることもない
2019/03/08(金) 14:05:09.01ID:jbQifWXg0
>>758
HTMLのタグはDOMですか?
CSSで指定する色や配置はUIですか?
761デフォルトの名無しさん (ワッチョイ a701-w6xA)
垢版 |
2019/03/08(金) 14:11:29.15ID:/TYC9ex30
>>758
いや随分コード減るぞ。当然ミスも減る。デザイナも楽になる。
>>757
うむ、リアクティブの方が良い事は理解できたようだね。あとは君がデザイナや上司を説得するんだよ。そこは別問題。
2019/03/08(金) 14:12:44.22ID:kMybevyH0
jQueryはすべてデザイナーがやるべき
ボタンをクリックしたらどのタグの色が変わるのか、それを知っているのはデザイナーだけで良い
2019/03/08(金) 14:20:09.62ID:jbQifWXg0
>>761
> いや随分コード減るぞ。当然ミスも減る。デザイナも楽になる。

jQueryの方が少ないですね。

嘘だと思うならこれ同じことを実際に動くのに必要な分、書いてみてください。

[JavaScript]
$('.my-component [name="switch"]').change(function() {
 $(this).closest('.my-component').toggleClass('active', this.checked);
});

[HTML]
<div class="my-component">
 <input type="checkbox" name="switch">switch
</div>

[CSS]
.my-component.active {
color: red;
}

jQuery版の実際に動くコードですよ。
https://jsfiddle.net/eu2wm3tk/
764デフォルトの名無しさん (オッペケ Src7-EzoF)
垢版 |
2019/03/08(金) 14:20:12.96ID:mjBCJk3zr
ほらほらだからこうなるって何度も言っただろ
フロントはフルスタックじゃないとこの程度ですら揉めるんだよ
もう一度言うぞ

デザインできないフロントエンジニアはクソ
エンジニアリングできないフロントデザイナーはクソ

お前ら言い争ってる時点で無能だと自覚しろ
2019/03/08(金) 14:20:13.82ID:kMybevyH0
>>761
>いや随分コード減るぞ。当然ミスも減る。デザイナも楽になる。
そう、デザイン側のJSコードは減る。それはたしかだし、データ側JSとの繋ぎかたもはっきりとするね
欠点はHTML内に変なのをたくさん突っ込むのはいかがなものかってことかな
2019/03/08(金) 14:20:59.66ID:jbQifWXg0
>>762
> jQueryはすべてデザイナーがやるべき
JavaScriptのライブラリなのにデザイナーって意味不明w

ボタンを押したら、ここのタグにこういうクラスがつきます。
って伝えるだけで、あとはそれぞれ作業ができる。

これが分業っていうんだよ。
2019/03/08(金) 14:28:57.63ID:B/j0V0h2a
>>757
どっちかというとその場合デザイナーに必要なのはv-showじゃなくてisShowだから
どういうモードの時変数の設定値を何にすべきかという一覧表があればいいだけじゃね?
てかその辺のコード化はデザイナーじゃなくてフロントエンジニアの仕事だろ
2019/03/08(金) 14:31:25.36ID:jbQifWXg0
> てかその辺のコード化はデザイナーじゃなくてフロントエンジニアの仕事だろ
フロントエンジニアがHTMLを書くから
分業できないってことなんですよ
769デフォルトの名無しさん (オッペケ Src7-EzoF)
垢版 |
2019/03/08(金) 14:33:21.35ID:mjBCJk3zr
>>757
いや、お前がデザイン覚えろよwwww
2019/03/08(金) 14:36:15.92ID:kMybevyH0
>>766
プログラマーはcssに書かれたclassの名前まで知らなくていい
その方がデザイナーが変更してもプログラマーが対応しなくて済むだろ?
2019/03/08(金) 14:54:21.66ID:B/j0V0h2a
デザイナーはロジックレスな一枚ずつのhtmlと画像素材のcss作ってりゃそれでいいじゃん
772デフォルトの名無しさん (オッペケ Src7-EzoF)
垢版 |
2019/03/08(金) 14:58:33.92ID:kvsQt7Fnr
UI・UXやインタラクションはエンジニアがやる分野
世界的にもその方向性になってきている
しかし世界中のエンジニアは無能だからまともにデザインできない
ごく簡単なUIすら理解できない

終わってんだろ
2019/03/08(金) 15:02:21.59ID:B/j0V0h2a
最低限のモダンっぽい見た目でいいならもうcssフレームワークのどれかでもいいだろ
2019/03/08(金) 15:07:22.44ID:jbQifWXg0
>>769
> いや、お前がデザイン覚えろよwwww

分業するんだよ
2019/03/08(金) 15:08:44.58ID:jbQifWXg0
>>770
分業っていうのは、完全に相手のことを知らないで
できるわけじゃないんだよ。

必要最小限、クラス名だけ。

jQuery使って、HTMLとCSSを正しく使うだけで
最小限の連絡で、それぞれが開発できるんだよ。
2019/03/08(金) 15:11:41.12ID:jbQifWXg0
>>771
> デザイナーはロジックレスな一枚ずつのhtmlと画像素材のcss作ってりゃそれでいいじゃん

コンポーネントには状態があるんだから、
少なくともその状態ごとのデザインは作ってもらわないと困る。

で、どうやるかというと、お互いで決めたルール
コンポーネントのここに、こういうクラスがつきますよー
というルールに基づいて

デザイナーは、HTMLのコンポーネントのタグに
classを変更するだけなんだよ。
最終的にはJavaScriptでクラスを変更することになるが
開発中は、手書きでクラスを変更するだけ

超簡単
2019/03/08(金) 15:13:04.69ID:kMybevyH0
>>772
いやUI・UXはデザイナーがやるべきだろ
そこで分離するからおかしなことになってる
2019/03/08(金) 15:15:10.57ID:B/j0V0h2a
デザイナーに求めるものなんて最低限なら画像データだっていい
html形式でブラウザで表示できるなら大助かり
期日が守れないヤツ多いから最低限期日までにどっちか出してくれればそれ以上に求める事なんてねぇんだが
779デフォルトの名無しさん (ワッチョイ a701-w6xA)
垢版 |
2019/03/08(金) 16:28:21.11ID:/TYC9ex30
>>763
くわー面倒だなあ。でもコード見ないと分からんか。

[JavaScript]
isActive=false

[HTML]
<div class="my-component" class=“{active:isActive}”>
<input type="checkbox” v-model=“isActive”>switch
</div>

[css]
変更なし

どう?君のコードより随分少ないだろ。特にscriptなんて変数一個で終わり。まだ分からない事あるなら聞いてみなよ。でもスマホ手打ちなんで面倒なのはやめてw
780デフォルトの名無しさん (ワッチョイ a701-w6xA)
垢版 |
2019/03/08(金) 16:38:37.56ID:/TYC9ex30
おっとミスった。スマホ手打ちなんですまんね。

[HTML]
<div class="my-component" class=“{active:isActive}”>
正しくは
<div class="my-component" :class=“{active:isActive}”>
:が抜けてたよ。
2019/03/08(金) 16:49:32.55ID:oNzvowiX0
>>779
あのさぁ、動かないコード書かないでくれないか?
scriptタグまでは書かなくていいよ。jQueryでも書いてないからさ、
でも動くコード書いてっていったよね?
せめてjsfiddleで動かしてから来てよ
2019/03/08(金) 16:54:12.44ID:oNzvowiX0
なんか動くって嘘つきそうだから
>>779では動かないという証拠として
>>779の内容を https://jsfiddle.net/b5xusp1d/ に書いておいたから

ほら動かないでしょ?
これを動くように修正してね。

jQuery版の実際に動くコードですよ。
https://jsfiddle.net/eu2wm3tk/
783デフォルトの名無しさん (ワッチョイ a701-w6xA)
垢版 |
2019/03/08(金) 16:55:22.77ID:/TYC9ex30
>>781
それは贅沢だなw。こっちはスマホだと言うのに。あ、そうか君はvue知らないから動作チェックできないのか。どうせなら入れてみたら?簡単だよ。
あとコードは短くなった訳だが感想はどうかね?
2019/03/08(金) 16:55:35.67ID:oNzvowiX0
ほんとなんですぐばれる嘘を作るんだろう?
理解できないな
2019/03/08(金) 16:56:30.27ID:oNzvowiX0
>>783
だから動かないって
証拠>>782にかいたからさ。
お前がスマホとか知らんわ

スマホだから動かなくてもいいでしょ?
嘘だけど、いいでしょとか。恥ずかしくないの?
2019/03/08(金) 16:58:49.01ID:oNzvowiX0
あ、ReactじゃなくてVueか。

はい、こっちにVue読み込んだの置いたからさ、
こっちも動かない。はぁ。動かない(笑)

https://jsfiddle.net/zvft0qo8/
787デフォルトの名無しさん (ワッチョイ a701-w6xA)
垢版 |
2019/03/08(金) 17:01:09.95ID:/TYC9ex30
>>786
書き方間違えてるぞ。vue初期からしなきゃ動かんよw
2019/03/08(金) 17:01:40.94ID:oNzvowiX0
あともう一つ教えといてあげるよ。

作ったのは.my-componentなんだ。コンポーネント。再利用可能。

つまりな、HTMLをこう書くだけで
同じ動きがするコンポーネント増やせるのよ。jQuery版は。
ここまでやってくれよ

<div class="my-component">
 <input type="checkbox" name="switch">switch1
</div>

<div class="my-component">
 <input type="checkbox" name="switch">switch2
</div>

<div class="my-component">
 <input type="checkbox" name="switch">switch3
</div>


https://jsfiddle.net/zygq0r56/
2019/03/08(金) 17:02:12.51ID:oNzvowiX0
>>787
書き方間違えてるって。
動くコード書いてないお前の落ち度じゃん
2019/03/08(金) 17:07:56.77ID:oNzvowiX0
vueは面倒だなーって思いながら、

vue初期からしなきゃ動かんよw

と指摘された点を
今書いてるのかな?w
791デフォルトの名無しさん (ワッチョイ a701-w6xA)
垢版 |
2019/03/08(金) 17:08:24.75ID:/TYC9ex30
>>789
おいおい、vue知らないのに勝手にアップして動かないと言うのは無しだろ。知らないなら知らないと言えば教えてあげるのに。初期化方法までは面倒みれんぞ。jQueryだってそうだろ?
まあいいよ、後で動作する奴を上げてあげるよ。
2019/03/08(金) 17:12:52.61ID:oNzvowiX0
> jQueryだってそうだろ

何言ってるんだ?
jsfiddleにはまさにこれだけのコードしか書いてないんだが?

$('.my-component [name="switch"]').change(function() {
 $(this).closest('.my-component').toggleClass('active', this.checked);
});

いやまさかそんなこと、ありえるなんて思いもしなかった!
レベルなのか?w
2019/03/08(金) 17:15:48.86ID:oNzvowiX0
ついでだからちょっと改造

$('.my-component [name="switch"]').change(function() {
 $(this).closest('.my-component').toggleClass('active', this.checked);
});

は .my-component が 2回でてきてDRYじゃないんで
1回で書く方法

$('.my-component').on('change', '[name="switch"]', function(event) {
 $(event.delegateTarget).toggleClass('active', this.checked);
});

https://jsfiddle.net/tk5yvs3g/
2019/03/08(金) 17:19:36.99ID:oNzvowiX0
>>791
> まあいいよ、後で動作する奴を上げてあげるよ。

じゃあHTML側はこれ相当でお願いね。
コンポーネントは3つ。

<div class="my-component">
 <input type="checkbox" name="switch">switch1
</div>

<div class="my-component">
 <input type="checkbox" name="switch">switch2
</div>

<div class="my-component">
 <input type="checkbox" name="switch">switch3
</div>
795デフォルトの名無しさん (ワッチョイ a701-chNm)
垢版 |
2019/03/08(金) 17:59:49.58ID:/TYC9ex30
>>794
ふう、やっとPCの前に戻ってきた。というわけでちょっと上げてみた。ブラウザから5ch書き込むの久しぶりだわw。
https://codepen.io/hinoragi/pen/YgVQjK

簡単にテンプレート化してコンポーネント化もしといた。何か分からないことあるなら遠慮なく質問してよ。ちょっと用事あるから次は10時ぐらいにスレみる予定。
2019/03/08(金) 18:05:40.88ID:oNzvowiX0
[jQuery]
$('.my-component [name="switch"]').change(function() {
 $(this).closest('.my-component').toggleClass('active', this.checked);
});

[Vue]
Vue.component('my-component',{
template:`
<div class="my-component" :class="{active:isActive}">
<input type="checkbox" v-model="isActive">{{val}}
</div>
`,
data:function(){return{
isActive:false
}},
props:["val"]
})
new Vue({el: '#app'})


あ、デザイナーさん。HTMLはVueのコードに移動したんで
デザイン変えたきゃVueの方いじってくださいねwww

やっぱりこうなるw
2019/03/08(金) 18:07:11.66ID:oNzvowiX0
[jQuery] 3行
$('.my-component [name="switch"]').change(function() {
 $(this).closest('.my-component').toggleClass('active', this.checked);
});

[Vue] 12行
Vue.component('my-component',{
 template:`
  <div class="my-component" :class="{active:isActive}">
  <input type="checkbox" v-model="isActive">{{val}}
  </div>
 `,
 data:function(){return{
  isActive:false
 }},
 props:["val"]
})
new Vue({el: '#app'})

あ、デザイナーさん。HTMLはVueのコードに移動したんで
デザイン変えたきゃVueの方いじってくださいねwww

やっぱりこうなるw


行数は増え、分業ができなくなる
2019/03/08(金) 18:11:58.57ID:oNzvowiX0
VueはコンポーネントとDOM構造が密接に結びついているから、
以下みたいに、デザイン上の都合などで変えた時の柔軟性がなくなってしまうんだよな。
jQueryならあくまで、my-componentは、中のname=switchがONになったらクラスを変えるってだけで
中身は自由にいろんなものに変更できるというコンポーネントなのに

<div class="my-component">
 <input type="checkbox" name="switch">switch1
 <p>ここはswitch1です</p>
</div>

<div class="my-component">
 <input type="checkbox" name="switch">switch2
 <select>
  <option>1</option>
  <option>2</option>
  <option>3</option>
 </select>
</div>

<div class="my-component">
 <input type="checkbox" name="switch">switch3
 <img src="かっこいい画像.gif">
</div>
799デフォルトの名無しさん (ワッチョイ a701-w6xA)
垢版 |
2019/03/08(金) 18:44:14.67ID:/TYC9ex30
>>797
気になって覗きに来たら案の定。。うーん、そこから先は話長くなるぞ。一番簡単なサンプルだし、5chでやる規模じゃない。
それより最初の話はどうした?vueの方が随分コード短いぞ。その質問に答える為にサンプル上げたんだが、答えるのが礼儀ってもんだぜ。
2019/03/08(金) 18:49:38.83ID:oNzvowiX0
>>799
> 気になって覗きに来たら案の定。。うーん、そこから先は話長くなるぞ

jQueryと同じことをするのに、話が長くなるんだへーw

ま結論な。jQueryが3行の所、Vueだと12行になが〜くなりました。
テンプレートのところを除いたとしても7行。jQueryの倍

[jQuery] 3行
$('.my-component [name="switch"]').change(function() {
 $(this).closest('.my-component').toggleClass('active', this.checked);
});

[Vue] 12行
Vue.component('my-component',{
 template:`
  <div class="my-component" :class="{active:isActive}">
  <input type="checkbox" v-model="isActive">{{val}}
  </div>
 `,
 data:function(){return{
  isActive:false
 }},
 props:["val"]
})
new Vue({el: '#app'})
2019/03/08(金) 18:52:05.37ID:oNzvowiX0
それに一番ひどいのは、やっぱりmy-componentのdivの中身を
デザイナがいじろうとしたら、JavaScriptファイルを修正しなければ
ならなくなるってところなんだよね。
DOMとコードが密接に結びついちゃってる。
2019/03/08(金) 18:56:00.97ID:oNzvowiX0
jQueryの場合、JavaScriptのコードとDOMの構造は結ぶていてなくて
結びついているのは、.my-componentというクラス名と
input name=switchだけ。だからDOMの構造をどんなに変えても
クラス名とそういう名前のinputがあればいい
コードとDOMの構造が分離されている
803デフォルトの名無しさん (ワッチョイ a701-w6xA)
垢版 |
2019/03/08(金) 19:11:44.53ID:/TYC9ex30
>>801
やっぱり全く理解できてないじゃん。最初の話に戻すぞ。
最初の例ならスクリプトは、
new vue({data:{isActive:false}})
これだけ。君が分からなくて動かん!!とか騒いでた奴。君のその3行のスクリプトと比べてみなよ。

次に、まあ君はvue知らんからしょうがないがテンプレートは実務では当然外部に持つ。単一ファイルコンポーネントでググれ。

これで聞かれた事は答えたって事で俺からも質問していいか?

さっきからコンポーネントと言ってるが、君のはコンポーネントじゃないだろ。単なるコピペでカプセル化も局所化も無い。サンプルである事を割り引いてもコンポーネントと呼べる内容じゃない、と思うんだが、マジでどう思ってるの?
2019/03/08(金) 19:14:42.43ID:oNzvowiX0
>>803
> new vue({data:{isActive:false}})

それだけだと、どれと結びついてるのか(=セレクタ)その情報がないだろ。
セレクタを省略して良いんだったら、jQueryだってこの一行だよ。
toggleClass('active', this.checked);
2019/03/08(金) 19:16:38.22ID:oNzvowiX0
いや、値を変えるコードすら無いかw
jQueryだとこれだなw Vueより断然短い
'active'
2019/03/08(金) 19:23:09.87ID:oNzvowiX0
> 最初の例ならスクリプトは、
> new vue({data:{isActive:false}})
> これだけ。

これだけで動く!(=動かない)

これなんて詐欺?w
807デフォルトの名無しさん (ワッチョイ a701-w6xA)
垢版 |
2019/03/08(金) 19:25:20.00ID:/TYC9ex30
>>804
がーん、ここまで書いても分からんか。それ動作せんだろ。。自分で言った様に動作するコードで比較しようぜ!!
それと、俺は君を責めてる訳じゃなんだぜ。長年jQueryには世話になったから、優秀なライブラリだとよく知ってる。でもここはvue react angularスレだろ。jQueryはややすれ違いなんだよ。でもまあお互いの長所短所を比較しつつ、まったり雑談しようや。
808デフォルトの名無しさん (ワッチョイ a701-w6xA)
垢版 |
2019/03/08(金) 19:26:43.19ID:/TYC9ex30
>>806
wwワザとか?vue本体ロードしなはれよ。
■ このスレッドは過去ログ倉庫に格納されています
5ちゃんねるの広告が気に入らない場合は、こちらをクリックしてください。

ニューススポーツなんでも実況