質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

MVVM

MVVM(Model View ViewModel)は構築上のデザインパターンで、表現ロジック(ViewModel)によってデータ(Model)からページ(View)を分離させます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

1回答

1122閲覧

仮想DOMを利用しない場合のJSアーキテクチャについて

takashiaihara

総合スコア5

Vue.js

Vue.jsは、Webアプリケーションのインターフェースを構築するためのオープンソースJavaScriptフレームワークです。

MVC

MVC(Model View Controller)は、オブジェクト指向プログラミングにおけるモデル・ビュー・コントローラーの総称であり、ソフトフェア開発で使われている構築パターンとしても呼ばれます。

MVVM

MVVM(Model View ViewModel)は構築上のデザインパターンで、表現ロジック(ViewModel)によってデータ(Model)からページ(View)を分離させます。

JavaScript

JavaScriptは、プログラミング言語のひとつです。ネットスケープコミュニケーションズで開発されました。 開発当初はLiveScriptと呼ばれていましたが、業務提携していたサン・マイクロシステムズが開発したJavaが脚光を浴びていたことから、JavaScriptと改名されました。 動きのあるWebページを作ることを目的に開発されたもので、主要なWebブラウザのほとんどに搭載されています。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

1クリップ

投稿2020/04/09 05:39

前提

現在、フロントエンドのコーディングを行っています。
PaaSで送信された静的HTMLに対して、JavaScriptで機能を被せるような形です。
(リアルDOMに対する操作が基本なので、仮想DOMは利用できない想定です。)

複数のAPI通信とイベント動作を持たせる予定なので、管理が複雑化する恐れがあります。
そのため、MVCやMVVMのアーキテクチャを取り入れようと思っています。

発生している問題・エラーメッセージ

上記の通り、仮想DOMを利用しない場合でも、reactやvueを利用するメリットはあるでしょうか。
jQueryあたりを利用する想定ですが、自前でアーキテクチャを考えたほうが良いでしょうか。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

yambejp

2020/04/09 05:42

具体的に何をどうしたいというのはないのでしょうか?
maisumakun

2020/04/09 05:42

「仮想DOMを使用しない」で「ReactやVueを利用する」とはどういう意味でしょうか。
maisumakun

2020/04/09 05:43

「ReactやVueで何かを描画する」=「仮想DOMを使用する」です。
takashiaihara

2020/04/09 06:23

みなさま、ありがとうございます。 ReactやVueでは、MVVMのアーキテクチャが使用されているということで、 その考え方のみ流用できないか、という背景でした。 MVVMにおけるViewの部分のみ、仮想DOMを使用しないリアルDOM操作に置き換えられれば 雑なイベント管理が避けられるのではと思っていましたが、申し訳ありません。私の勉強不足です。 今回の案件で、モダンなJSライブラリを使用できればスキルアップにつながるのではと 上司を説得できる材料を探していましたが、難しそうですね。 こちらの質問は、しばらくしたら削除します。 ありがとうございました。
maisumakun

2020/04/09 06:29

> ReactやVueでは、MVVMのアーキテクチャが使用されているということで、 いえ、ReactやVueはビュー部分のみです(MVVMの仕組みを作るのに使うことはできます)。
takashiaihara

2020/04/09 06:45

ありがとうございます。 いい経験になりそうなので、一旦自前で構成部分を考えながら試行錯誤してみた上で、 Reactなどに挑みたいと思います。
guest

回答1

0

仮想DOMではなくテンプレートですよね?

参考記事: 仮想DOMは本当に“速い”のか? DOM操作の新しい考え方を、フレームワークを実装して理解しよう


reactやvueを利用するメリットはあるでしょうか。

メリットは大いにあります。

とあるAPIが静的HTMLを返してきたとしましょう。
それはdangerouslySetInnerHTMLで任意のDOMの配下にぶら下げる事が可能です。

DOMツリーで見るとこんな感じ

- Reactで管理出来ている領域 - モーダルボックス - コンフィグ - APIとHTTP通信を行う箇所 - APIから送られてきたHTMLをベタッと貼り付ける領域

こんな感じでReactで作った巨大な管理画面世界の中に、
ベタッとHTMLを貼り付けて、上から操作する仕組みを用意してしまえば楽に実装出来ます。

JavaScriptにはバブリングを利用したイベント移譲が可能です。
どうせ奥のHTMLがドラスティックに変化したら即死なのはjQueryでもReactでもVueでも一緒なので、
event.target.closestからCSSセレクタで要素を確認して当てはまるなら実行みたいなイベントを作って行けば問題ありません。

また、特定の箇所からHTMLをぶら下げるということは、
親の要素はReactやVueの世界によりやりたい放題ですよね?

CSSの子孫セレクタを使って上にactiveクラスが存在しないので、
下の要素の○○は非表示にしますみたいな事である程度の見栄えは変えられます。

css

1.item { 2 display: none; 3} 4 5.active .item { 6 display: block; 7}

ReactとjQueryの共闘も可能

高度な事がやりたい場合、
払い出されたHTMLをベタッと貼り付けるだけでは実現出来ない可能性があります。

jQueryは現状ブラウザが読み込んでいるdocument.bodyから探索していく手法もありますが、
HTML文字列をベタッと貼り付けると、閉じた世界でDOMツリーを作って探索できます。

払い出されたHTMLの内部を探索して、
必要な情報だけ吸い上げて、不要な情報は捨ててしまえば良いのです。
後はフルReactやVue.jsだけで表現して好き勝手やれば問題ありません。


jQueryでやるのはオススメしない

基本的にjQueryやネイティブJavaScriptでDOMをいじるのはやめたほうがいいです。
そもそもJavaScriptには「変化しろ!」という命令しか存在しないので、
壊れたDOMは二度と元に戻りません。
(戻れという命令が無いんですね)

結局コピーをとったりなんやかんややり始めると、
自分の作った管理エリアからAPIから払い出されたHTMLをぶら下げるというやり方になります。
やっている事はバグだらけのオレオレReactな訳で、工数増えるだけの無駄な作業です。

今はjQueryの方が超詳しくて、ReactやVueは全然なんだ……
だから一度jQueryで実装してみるんだ……ならまだわかります。
しかしゼロベースでどちらが相応しいかで考えた場合、絶対にJSフレームワークを使うべきです。

投稿2020/04/09 07:51

編集2020/04/09 07:56
miyabi-sun

総合スコア21158

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問