Movatterモバイル変換


[0]ホーム

URL:


Yuta Ohashi, profile picture
Uploaded byYuta Ohashi
PDF, PPTX7,603 views

Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり

Laravel/Vue.js 勉強会 #10

Embed presentation

Download as PDF, PPTX
Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとりLaravel/Vue.js勉強会 #102019/07/18Yuta Ohashi
2blue_goheimochi⻘ごへいもち株式会社オウケイウェイヴPHP(Laravel),Javascript(Vue.js/Nuxt.js)Docker, Golang, DDD …おおはし ゆうた
3今⽇話すこと• Atomic Designって︖• Formをコンポーネントに分解してみる• コンポーネント間のデータのやりとり• まとめ
4Atomic Designって︖
5Atomic Designって︖http://atomicdesign.bradfrost.com/
6Atomic Designって︖• Bread Frostさんが提唱• Atomsが集まってMoleculesに、Moleculesが集まってOrganismsに、Organismsが集まって・・・・Pageができる• ⼤きな要素を細分化して、⼩さい要素として捉える• 詳細は「Atomic Designとは︖」で検索 & 原典を参照ください
7Formをコンポーネントに分解してみる
8Formをコンポーネントに分解してみる
9Formをコンポーネントに分解してみる
10Formをコンポーネントに分解してみるPages
11Formをコンポーネントに分解してみるここになにかが⼊る
12Formをコンポーネントに分解してみるここになにかが⼊るTemplates
13Formをコンポーネントに分解してみる
14Formをコンポーネントに分解してみるOrganisms
15Formをコンポーネントに分解してみる
16Formをコンポーネントに分解してみるMoleculesMoleculesMoleculesMoleculesMolecules
17Formをコンポーネントに分解してみる
18Formをコンポーネントに分解してみるAtomAtomAtomAtomAtomAtomAtomAtomAtomAtomAtomAtomAtom AtomAtom Atom
19Formをコンポーネントに分解してみる
20Formをコンポーネントに分解してみる
21Formをコンポーネントに分解してみる
22Formをコンポーネントに分解してみる
23コンポーネント間のデータのやりとり
24コンポーネント間のデータのやりとり• 基本的にデータはPagesかOrganismsで管理する• APIコールやStoreでデータを取得・保持する場合もPagesかOrganismsで• 要するに、MoleculesやAtomsは状態をなるべく持たないようにする• 親⼦のコンポーネント間のやり取りは props in / events out で• 親から⼦にはpropsでデータを渡す• 親でpropsの値が変更されれば⼦に伝搬する• ⼦から親には$emitでイベントを発⾏し、データの変更を伝える• 親コンポーネントが⼦のイベントを検知する
25コンポーネント間のデータのやりとり• 基本的にデータはPagesかOrganismsで管理する• APIコールやStoreでデータを取得・保持する場合もPagesかOrganismsで• 要するに、MoleculesやAtomsは状態をなるべく持たないようにする• 親⼦のコンポーネント間のやり取りは props in / events out で• 親から⼦にはpropsでデータを渡す• 親でpropsの値が変更されれば⼦に伝搬する• ⼦から親には$emitでイベントを発⾏し、データの変更を伝える• 親コンポーネントが⼦のイベントを検知する
26コンポーネント間のデータのやりとり
27コンポーネント間のデータのやりとりexport default {data () {return {user_id: "",password: "",mail_address: "",gender_box: "",birthday: ""}}}Organismsでデータを保持する
28コンポーネント間のデータのやりとり<template><form><user-id-box :user_id="user_id" @change="changeUserId" /><password-box :password="password" @change="~" /><mail-address-box :mail_address="mail_address" @change="~" /><gender-box :gender="gender" @change="~" /><birthday-box :birthday="birthday" @change="~" /><submit-button @click="doRegister">登録</submit-button></form></template>propsでデータを⼦コンポーネント(Molecules)に渡す
29コンポーネント間のデータのやりとり
30コンポーネント間のデータのやりとりexport default {props: {user_id: String},methods: {changeUserId: function (user_id) {this.$emit("change", user_id)}}}親(Organisms)からpropsでデータを受け取る
31コンポーネント間のデータのやりとり<template><div><form-label for="user_id">ユーザーID:</form-label><input-text :value="user_id" @change="changeUserId"/></div></template>さらに⼦コンポーネント(Atoms)にpropsでデータを渡す
32コンポーネント間のデータのやりとり<template><div><form-label for="user_id">ユーザーID:</form-label><input-text :value="user_id" @change="changeUserId"/></div></template>さらに⼦コンポーネント(Atoms)にpropsでデータを渡すv-bind:value で渡すのがここではちょっと重要(Atomsのコンポーネントで v-modelを使うため)
33コンポーネント間のデータのやりとり
34コンポーネント間のデータのやりとりexport default {props: {value: String},computed: {input_text: {get: function () {return this.value},set: function (value) {this.$emit("change", value)}}}}親(Molecules)からpropsでデータを受け取る
35コンポーネント間のデータのやりとりAtomは最⼩の要素Inputなのでフォーム⼊⼒バインディングを利⽤https://jp.vuejs.org/v2/guide/forms.html<template><input type="text" v-model="input_text"></template>
36コンポーネント間のデータのやりとり<template><input type="text" v-model="input_text"></template>v-modelはv-bind:valueとv-on:inputを⼀度に設定してくれているhttps://jp.vuejs.org/v2/guide/components.html#コンポーネントで-v-model-を使う<template><input type="text”:value="input_text”@input="input_text = $event.$target.value”></template>
37コンポーネント間のデータのやりとりexport default {props: {value: String},computed: {input_text: {get: function () {return this.value},set: function (value) {this.$emit("change", value)}}}}v-modelの値の変更はcomputedプロパティで知る(のが多分定⽯)https://jp.vuejs.org/v2/guide/computed.html算出-Setter-関数
38コンポーネント間のデータのやりとりexport default {props: {value: String},computed: {input_text: {get: function () {return this.value},set: function (value) {this.$emit("change", value)}}}}inputの⼊⼒に変更があった場合に⼦コンポーネント(Atoms)がイベントを発⾏親コンポーネント(Molecules)でそのイベントを検知する
39コンポーネント間のデータのやりとりexport default {props: {value: String},computed: {input_text: {get: function () {return this.value},set: function (value) {this.$emit("change", value)}}}}親コンポーネント(Molecules)に変更を伝える場合は$emitを使う下記の場合は、親コンポーネントで定義したchangeイベントが呼び出され、valueの値を⼀緒に送る
40コンポーネント間のデータのやりとり<template><div><form-label for="user_id">ユーザーID:</form-label><input-text :value="user_id" @change="changeUserId"/></div></template>⼦コンポーネント(Atoms)のイベントを検知してchangeのイベントが呼び出されるのでchangeUserIdを実⾏する
41コンポーネント間のデータのやりとりexport default {props: {user_id: String},methods: {changeUserId: function (user_id) {this.$emit("change", user_id)}}}⼦コンポーネント(Atoms)から引数に変更された値が渡ってくるので⼦コンポーネント(Molecules)でイベントを発⾏し親コンポーネント(Organisms)でそのイベントを検知する
42コンポーネント間のデータのやりとり<template><form><user-id-box :user_id="user_id" @change="changeUserId" /><password-box :password="password" @change="~" /><mail-address-box :mail_address="mail_address" @change="~" /><gender-box :gender="gender" @change="~" /><birthday-box :birthday="birthday" @change="~" /><submit-button @click="doRegister">登録</submit-button></form></template>⼦コンポーネント(Molecules)のイベントを検知してchangeのイベントが呼び出されるのでchangeUserIdを実⾏する
43コンポーネント間のデータのやりとりexport default {data () {return {user_id: "",password: null,~~~~~~}},methods: {changeUserId (user_id) {this.user_id = user_id}}}⼦コンポーネント(Molecules)から引数に変更された値が渡ってくるのでOrganismsのdataを変更する
44コンポーネント間のデータのやりとりexport default {data () {return {user_id: "blue-goheimochi",password: null,~~~~~~}},methods: {changeUserId (user_id) {this.user_id = user_id}}}dataが変更されると親から⼦に変更が伝わってデータが更新される⼦コンポーネントでは値を管理せず、親のコンポーネントでpropsを変更することで⼦コンポーネントに伝搬させる
わかりづらい
46画⾯キャプチャを⾒ながらもう⼀度
47コンポーネント間のデータのやりとりOrganismsからMoleculesにprops経由でデータ(空の値)が渡る
48コンポーネント間のデータのやりとりMoleculesからAtomsにprops経由でデータ(空の値)が渡る
49コンポーネント間のデータのやりとりinputのvalueに値(空の値)が反映される
50コンポーネント間のデータのやりとりinputに⼊⼒があったのを検知する(この時点ではinputのvalueには反映されない)blue-goheimochi
51コンポーネント間のデータのやりとりAtomsでイベントが発⾏されMoleculesがそれを変更された値と⼀緒に検知するblue-goheimochi
52コンポーネント間のデータのやりとりMoleculesでイベントが発⾏されOrganismsがそれを変更された値と⼀緒に検知するblue-goheimochi
53コンポーネント間のデータのやりとりOrganismsで変更された値を更新するuser_id = blue-goheimochi
54コンポーネント間のデータのやりとりOrganismsからMoleculesにprops経由でデータ(更新された値)が渡るblue-goheimochi
55コンポーネント間のデータのやりとりMoleculesからAtomsにprops経由でデータ(更新された値)が渡るblue-goheimochi
56コンポーネント間のデータのやりとりinputのvalueに値(更新された値)が反映されるblue-goheimochi
なるほどわからん
58シンプルにprops in / events outだけをみる
59コンポーネント間のデータのやりとりOrganisms Molecules Atomsprops in / events out値が変更されたらイベントを発⾏する
60コンポーネント間のデータのやりとりOrganisms Molecules Atomsprops in / events out⼦が発⾏したイベントを親が検知して値を受け取る
61コンポーネント間のデータのやりとりOrganisms Molecules Atomsprops in / events out検知した値とともにイベントを発⾏する
62コンポーネント間のデータのやりとりOrganisms Molecules Atomsprops in / events out⼦が発⾏したイベントを親が検知して値を受け取る
63コンポーネント間のデータのやりとりOrganisms Molecules Atomsprops in / events out値を設定する
64コンポーネント間のデータのやりとりOrganisms Molecules Atoms値が設定されたprops in / events out
65コンポーネント間のデータのやりとりOrganisms Molecules Atomspropsでデータが渡るprops in / events out
66コンポーネント間のデータのやりとりOrganisms Molecules Atomspropsでデータが渡るprops in / event out
67コンポーネント間のデータのやりとりOrganisms Molecules Atomsprops in / events out値が更新される
どうですか︖
正直⾔葉での説明わかりづらい
実際に⼿を動かしたほうが理解が進む︕
71まとめ
72まとめ• Vue.jsでFormをAtomic Designしてみた• コンポーネントが複数階層の親⼦関係になる• データはなるべく上位の親で管理• Organismsより上でデータは持つ• Molecules、Atomsに状態は持たない• うまいこと親⼦間でデータをやりとりする• props in / events out が⼤事• 実際に⼿を動かして感覚をつかみましょう︕

Recommended

PDF
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
PDF
ドメイン駆動設計のためのオブジェクト指向入門
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
PDF
ソフトウェア開発のやり方の改善
PDF
正しいものを正しく作る塾-設計コース
PPTX
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
PDF
ドメイン駆動設計のための Spring の上手な使い方
PDF
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
 
PDF
ドメイン駆動設計 ( DDD ) をやってみよう
PDF
異次元のグラフデータベースNeo4j
PDF
ドメイン駆動設計 本格入門
PDF
ドメイン駆動で開発する ラフスケッチから実装まで
PDF
ドメイン駆動設計 基本を理解する
PDF
Spring Data RESTを利用したAPIの設計と、作り直しまでの道のり
PDF
オブジェクト指向できていますか?
PDF
MySQL 5.7にやられないためにおぼえておいてほしいこと
PDF
ドメイン駆動設計 失敗したことと成功したこと
PDF
イミュータブルデータモデルの極意
PDF
ドメイン駆動設計に15年取り組んでわかったこと
PDF
ドメインオブジェクトの設計ガイドライン
PPT
ドメインロジックの実装方法とドメイン駆動設計
PDF
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
PDF
オブジェクト指向プログラミングのためのモデリング入門
PDF
Dockerfileを改善するためのBest Practice 2019年版
PPTX
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
PDF
イミュータブルデータモデル(世代編)
PDF
3分でわかるAzureでのService Principal
PPTX
Docker超入門
PPTX
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
PPTX
Atomic design+vue

More Related Content

PDF
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
PDF
ドメイン駆動設計のためのオブジェクト指向入門
PDF
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
PDF
ソフトウェア開発のやり方の改善
PDF
正しいものを正しく作る塾-設計コース
PPTX
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
PDF
ドメイン駆動設計のための Spring の上手な使い方
PDF
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
 
DDD x CQRS 更新系と参照系で異なるORMを併用して上手くいった話
ドメイン駆動設計のためのオブジェクト指向入門
SQLアンチパターン 幻の第26章「とりあえず削除フラグ」
ソフトウェア開発のやり方の改善
正しいものを正しく作る塾-設計コース
ちゃんとした C# プログラムを書けるようになる実践的な方法~ Visual Studio を使った 高品質・低コスト・保守性の高い開発
ドメイン駆動設計のための Spring の上手な使い方
「実践ドメイン駆動設計」 から理解するDDD (2018年11月)
 

What's hot

PDF
ドメイン駆動設計 ( DDD ) をやってみよう
PDF
異次元のグラフデータベースNeo4j
PDF
ドメイン駆動設計 本格入門
PDF
ドメイン駆動で開発する ラフスケッチから実装まで
PDF
ドメイン駆動設計 基本を理解する
PDF
Spring Data RESTを利用したAPIの設計と、作り直しまでの道のり
PDF
オブジェクト指向できていますか?
PDF
MySQL 5.7にやられないためにおぼえておいてほしいこと
PDF
ドメイン駆動設計 失敗したことと成功したこと
PDF
イミュータブルデータモデルの極意
PDF
ドメイン駆動設計に15年取り組んでわかったこと
PDF
ドメインオブジェクトの設計ガイドライン
PPT
ドメインロジックの実装方法とドメイン駆動設計
PDF
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
PDF
オブジェクト指向プログラミングのためのモデリング入門
PDF
Dockerfileを改善するためのBest Practice 2019年版
PPTX
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
PDF
イミュータブルデータモデル(世代編)
PDF
3分でわかるAzureでのService Principal
PPTX
Docker超入門
ドメイン駆動設計 ( DDD ) をやってみよう
異次元のグラフデータベースNeo4j
ドメイン駆動設計 本格入門
ドメイン駆動で開発する ラフスケッチから実装まで
ドメイン駆動設計 基本を理解する
Spring Data RESTを利用したAPIの設計と、作り直しまでの道のり
オブジェクト指向できていますか?
MySQL 5.7にやられないためにおぼえておいてほしいこと
ドメイン駆動設計 失敗したことと成功したこと
イミュータブルデータモデルの極意
ドメイン駆動設計に15年取り組んでわかったこと
ドメインオブジェクトの設計ガイドライン
ドメインロジックの実装方法とドメイン駆動設計
ツール比較しながら語る O/RマッパーとDBマイグレーションの実際のところ
オブジェクト指向プログラミングのためのモデリング入門
Dockerfileを改善するためのBest Practice 2019年版
DXとかDevOpsとかのなんかいい感じのやつ 富士通TechLive
イミュータブルデータモデル(世代編)
3分でわかるAzureでのService Principal
Docker超入門

Similar to Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり

PPTX
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
PPTX
Atomic design+vue
PPTX
Flight入門
PDF
はじめてのVue.js
PDF
Vue.js 基礎 + Vue CLI の使い方
PDF
Vue.jsのコンポネント指向について
「Atomic Design × Nuxt.js」コンポーネント毎に責務の範囲を明確にしたら幸せになった話
Atomic design+vue
Flight入門
はじめてのVue.js
Vue.js 基礎 + Vue CLI の使い方
Vue.jsのコンポネント指向について

More from Yuta Ohashi

PDF
許可を求めるな謝罪せよ?
PDF
GoでシュッとWebスクレイピングする
PPTX
LaravelアプリケーションをSeleniumでテストしてみた
PDF
レガシーなWebアプリケーションと向き合う
PDF
今日からGoをはじめる人に伝えたい$GOPATHではまった話
PDF
Laravel5.5から6.4にアップグレードしたときに必要だった7つのこと
PPTX
Laravelで式年遷宮中の現場で うまくいってること・ うまくいっていないこと
PDF
WindowsでもVagrantとChefでLaravelのローカル環境を(自分で)つくりたい!
PDF
5分でなんとなーくわかるDocker
PDF
「Laravelから学びレガシーと闘いはじめた」のその後
PDF
初心者がGoでCLIツール作ってみて学んだこと
PDF
三項演算子を見ると「ウッ」てなる人のはなし
PDF
Laravelから学びレガシーと闘いはじめた
PDF
My開発環境の話
PDF
テストを書くのに挫折したあとやったこと
PDF
Dockerをすこーしさわってみる
PPTX
2016年恥ずかしいふりかえり
PDF
無知の表明でチームをビルドする
許可を求めるな謝罪せよ?
GoでシュッとWebスクレイピングする
LaravelアプリケーションをSeleniumでテストしてみた
レガシーなWebアプリケーションと向き合う
今日からGoをはじめる人に伝えたい$GOPATHではまった話
Laravel5.5から6.4にアップグレードしたときに必要だった7つのこと
Laravelで式年遷宮中の現場で うまくいってること・ うまくいっていないこと
WindowsでもVagrantとChefでLaravelのローカル環境を(自分で)つくりたい!
5分でなんとなーくわかるDocker
「Laravelから学びレガシーと闘いはじめた」のその後
初心者がGoでCLIツール作ってみて学んだこと
三項演算子を見ると「ウッ」てなる人のはなし
Laravelから学びレガシーと闘いはじめた
My開発環境の話
テストを書くのに挫折したあとやったこと
Dockerをすこーしさわってみる
2016年恥ずかしいふりかえり
無知の表明でチームをビルドする

Vue.jsでFormをAtomic Designしてみた時のコンポーネント間のデータのやりとり


[8]ページ先頭

©2009-2025 Movatter.jp