LWC

LWC
100問 • 2年前
  • 谷峻輔
  • 通報

    問題一覧

  • 1

    コンポーネントが表示を行うとき(ブラウザコンソールで確認したとき)、<template>タグはどうなるか

    <namespace-component-name>に置き換えられる

  • 2

    独自のコンポーネントを参照する際、 名前空間は何を指定するか

    c デフォルト名前空間と呼ばれている。 コンポーネントを呼び出す際は、 c-my-component

  • 3

    importステートメントを利用すると何ができるようになるか import対象を3つあげよ

    モジュールで宣言されたクラス、関数、変数をインポートして利用できる

  • 4

    exportステートメントを利用するとなにがでにるか

    モジュールで宣言したクラス、関数、変数を他のコードで利用可能にできる

  • 5

    import {LightningElement } from ‘lwc’ におけるlwc とLightningElementについて説明せよ また何をしているか説明せよ

    lwcはLWCのコアモジュール LightningElementは標準HTML要素のカスタムラッパー lwcモジュールからLightningElementをインポートしている

  • 6

    export default Class MyComponent extends LightningElement について、なぜexport defaultしているか説明せよ

    そのコンポーネントを他のコンポーネントで利用可能とするため

  • 7

    LWCコンポーネントのモジュールで他の変数や関数はエクスポートできるか?

    サポートされていない。 エクスポート可能なのはLightningElementを継承したクラスのみ

  • 8

    コンポーネント間でコードを共有するにはどうするか

    サービスコンポーネントを作成し、 変数や関数をエクスポートする。

  • 9

    CSSをコンポーネント間で共有するにはどうするか

    CSSファイルと設定ファイルのみを含むモジュールを作成し、LWCのCSSファイルにそのモジュールをインポートする CSSを静的リソースにあげるのもありか?

  • 10

    LWCのカスタムアイコンを組み込むには、どうするか? また制限はあるか?

    SVGリソースをLWCと同じ名前で作成し、同じフォルダに追加する。 フォルダあたり1つまで。

  • 11

    テンプレートタグの中にテンプレートタグを含めれるか?

    ディレクティブである必要があるが、含めることができる。

  • 12

    HTMLから、person[2].name[‘John’] のような添え字や文字列でのJavaScriptへのアクセスは可能か

    できない。 アクセスするにはドット表記のみ person.firstNameみたいな

  • 13

    ChangeHandlerメソッドが起動した後、 再描画されるプロパティはどれか?

    greeting currentDate1 再描画時に、ゲッターやセッターなどの式は再評価される。 プロパティは再評価されない

  • 14

    あるバインドした真偽値から表示するコンポネートを動的に制御するにはどうするか?

    <template lwc:if={property}> ディレクティブを使用する elseif elseもある

  • 15

    リアクティビティな項目とはなにか?

    HTMLのテンプレートで利用されているLWC(JavaScript)のプロパティ HTMLのテンプレートで利用されているgetterメソッドの中で使用されている LWC(JavaScript)のプロパティ ※直接HTMLテンプレートで利用してなくてもgetterを通して間接的に利用していればリアクティブとなる。

  • 16

    リアクティブな項目が変更されるとどうなるか?

    コンポーネントが再表示される。 再表示されると、すべての式が再表示される。プロパティは再評価されない (つまりgetter関数が再実行される。) renderedCallback()ライフサイクルフックが実行される。

  • 17

    リアクティブな項目の検知方法はどうやってやっているか?

    ===で変更前と変更後をチェックされる。 等価ではなく、値のIDを比較する。 よって、オブジェクト内部の変更まではチェックされない。

  • 18

    オブジェクトや配列などのデータを操作する場合、変更を検出させるにはどうしたらよいか 二通り示せ

    新しいオブジェクトを作成して再度項目に割り当てる。 @trackデコレータを利用することで内部まで項目値の変更を深く追跡させるようにする。

  • 19

    配列の中身を反復して表示に使用できるfor eachディレクティブはどのように記載するか 例をかけ テンプレートタグには、属性⚪︎⚪︎を指定し、 中身では、属性⚪︎⚪︎を指定し、⚪︎⚪︎を表示することができる。

    for:each={items} for:item="item" for:index="idx" key={item.id} {idx}:{item} <template for:each={items} for:item="item" for:index="idx"> <p key={item.id}>{idx}:{item}</p> </template>

  • 20

    for eachディレクティブにおけるkey属性の役割はなにか

    リストの中身が変更された際、keyを利用して変更箇所を特定し再描画する。 keyは文字列か数値のみで一意である必要がある。 keyごとに要素を管理しているということ

  • 21

    for each以外に繰り返しが可能なディレクティブはなにか? またどういう状況で利用するか

    iteratorディレクティブ 最初の要素と最後の要素の振る舞いを変えることができる。 最初の要素と最後の要素の識別が可能!

  • 22

    iteratorを使った例を記載せよ

    <template iterator:it={contacts}> <li key={it.value.Id}> <div if:true={it.first} class="list-first"></div> {it.value.Name}, {it.value.Title} <div if:true={it.last} class="list-last"></div> </li> </template> ※例では記載ないがindexも指定可能 この例では、スタイルを適用することで、 一番上と一番下にボーダーを表示することができる

  • 23

    複数のHTMLがあり、どちらを表示するかを初期表示時に指定した条件で選択可能にする方法としてなにがあるか

    そのコンポーネントのJavaScriptで、複数のHTMLを同フォルダからインポートし、 render()メソッドを定義し、条件に応じて返却値にHTMLを返す https://developer.salesforce.com/docs/platform/lwc/guide/create-render.html

  • 24

    LWC標準コンポーネントに対して、SLDSでみつけたスタイルを適用したい。 どうすればよいか

    SLDSの該当コンポーネントのVariationsセクションを確認し、 記載があるものは、標準コンポーネントでvariant属性で指定することで、そのスタイルが利用できる

  • 25

    コンポーネントのスペーシング(位置揃え、パディング、余白、タイポグラフィなど)を変更するには何を使用すればよいか

    SLDSのユーティリティクラスを利用する。 具体的には、上記から探したクラスをコンポーネントのクラスに適用する。 https://www.lightningdesignsystem.com/utilities/alignment/

  • 26

    標準コンポーネントに対してVariantによる変更ではなく、背景色など細かい変更を行うのに適している設定方法とはなにか

    SLDSスタイル設定フックを利用する

  • 27

    SLDSスタイル設定フックはどうやって利用するか?

    SLDSのStyleHooks Overviewにて該当コンポーネントのバリエーションにあう(ある場合)スタイルフックを使用する。 使用する際はホストに対して適用すれば、テンプレート内のすべてのコンポーネントにスタイルが適用される。(子コンポーネントへもスタイルが適用される シャドウルートを貫通する) 補足として、標準コンポーネントでは CSSカスタムプロパティとして、スタイルを利用しているため、プレースホルダーとして活用している。 :host { --slds-c-button-brand-color-background: orange; --slds-c-button-brand-color-border: orange; /* Other CSS custom properties here */ }

  • 28

    使用事例に合う基本コンポーネントがみつらがない場合はどうするか?

    もっとも近いSLDSブループリントをみつけて独自のコンポーネントを作成する

  • 29

    SLDSブループリントからコンポーネントを作成する際に確認しておくことは?

    SLDSブループリントのタイトルの下にあるデバイスサポートの詳細を確認する (アダプティブ レスポンシブ、デスクトップ専用)

  • 30

    アダプティブとレスポンシブの違いは

    アダプティブはデスクトップ用と非デスクトップ用のマークアップが定義されている。 レスポンシブはマークアップは1つで、画面サイズに合わせて拡大縮小される

  • 31

    SLDSブループリントが基本コンポーネントと対応しているか、どうやって確認するか

    sldsブループリントページの右上にlightningComponentボタンがある場合は対応している

  • 32

    ブループリントを使用してカスタムコンポーネントを作成する手順はどんなかんじか?

    ブループリントをコピーし、テンプレートへ貼り付ける ブループリントの中身で、アイコンなど基本コンポーネントに置き換え可能なものは置き換える あとはjavascriptで表示メッセージなどを制御できるようにかえる

  • 33

    あるコンポーネントについて、ある条件に基づいて動的にスタイルやバリエーションを変更するにはどうするか?

    そのコンポーネントのclassやVariant属性の値に対して{}でバインドし、JavaScriptで制御する

  • 34

    CSSであるクラスを作成し、空白やスペース設定の値、フォントサイズや色など、lightning designのパターンを利用する場合はどうするか?

    設計トークンを利用する —lwcプレフィックスがついている CSSカスタムプロパティで宣言する div { margin-right: var(--lwc-spacingSmall); } https://www.lightningdesignsystem.com/design-tokens/

  • 35

    設計トークンを利用した際、実際の値に置き換えられるタイミングはいつか

    コンパイル時に置き換えられるため、 CSSStyleDeclaration.getPropertyValue()メソッドでCSSプロパティの値を得ると、置き換えられた文字列が取得される

  • 36

    複数のカスタムコンポーネントでデザインの一貫性を確保するために、何が利用できるか、CSSスタイルルールの共有以外でこたえよ

    カスタムAuraトークンを定義し、利用する <aura:tokens> <aura:token name="myBackgroundColor" value="#f4f6f9" /> </aura:tokens> /* myLightningWebComponent.css */ color: var(--c-myBackgroundColor); --c プレフィックスで参照可能

  • 37

    コンポーネントのスタイルシートで定義されたスタイルの範囲はどこまでか

    そのコンポーネントに限定される。

  • 38

    子コンポーネントのスタイル反映に関して説明せよ

    子コンポーネントの内部コンポーネントに対するスタイルの適用はできないが、子コンポーネントを一つの要素としてスタイル設定はできる。

  • 39

    子コンポーネントそのものに対してスタイル適用する場合はどうするか 親側と子側で説明せよ

    親側は 子コンポーネントのセレクタでスタイル設定する 子側は:hostセレクタでコンポーネントそのものにスタイル設定できる (:hostは親側から設定するみたいな認識)

  • 40

    子コンポーネントに対して、特定のクラスが付与されている場合のみ、親側からセレクタを利用してスタイル設定ではなく、子側からスタイル設定するにはどうするか

    :host(.クラス名)セレクタを利用する。 親側からセレクタで子コンポーネントにスタイル設定したのと同等 シャドウホストがセレクタにマッチする場合に適用される。 これを利用することで、子コンポーネント側からは自身に対してどのような設定が親から行われているかで、スタイル設定が可能である。 どういう時につかうかはわからん 標準コンポーネントではvariantのスタイル適用はjavascriptで制御しているし。

  • 41

    Shadowに関連するセレクタでサポートされていないのはなにか

    :host-context(セレクタ) ShadowホストがあるHTMLに対してセレクタを実行する。 ::part(セレクタ) 親側からShadowコンポーネントの要素にスタイル適用するのに使用する ネイティブShadowになれば対応するかも

  • 42

    Shadowに関連するセレクタでサポート外があるのはなぜか

    salesforceが合成Shadowプロフィルを使用しているから。 将来的ににネイティブShadowになる予定らしい

  • 43

    salesforceではセレクタで機能しないのはどんなセレクタか

    Idセレクタ テンプレート表示時に、idの値がグローバル一意値に変換される場合があるため

  • 44

    カスタム公開プロパティ(@api)に属性セレクタは利用可能か?

    利用可能ではない。 @apiで定義した変数は確かに利用する時属性とて扱うが、LWCエンジンでは属性名をキャメルケースに自動変換されるため、取得できない。 代替手段としてはdata-を使用し、属性セレクタで取得するなどがある

  • 45

    data属性はどういう場合に利用するか

    親側からHTMLで、子コンポーネントに対して変数を付与したいときに利用できる data-sub=‘aaa’ で属性設定すると、 そのオブジェクトの要素.dataset.subで取得できる。 それで子側のコンポーネントで振る舞いをかえてもいいし、 ただ単種に一意の値として、属性セレクタで取得するためのラベル付けとして利用するのもあり

  • 46

    カスタムコンポーネントに対してスタイル設定フックを公開するにはどうするか?

    スタイルフックを公開したい要素に対してカスタムプロパティを設定する。 ちなみに第二引数はデフォルト値として機能する .light { background-color: var(--light-theme-background-color, lightcyan); } 親側のコンポーネントで以下のような設定をすると、子コンポーネントに対してスタイル設定可能 :host { --light-theme-backgroud-color: honeydew;

  • 47

    CSSカスタムプロパティに対して設定したスタイルフックは、子コンポーネントの内部要素に対して直接スタイル設定するのとどのような違いがあるか

    子コンポーネントの内部要素に対してスタイル設定はできないが、 CSSカスタムプロパティを公開しておくと、親側からスタイルを適用することができる! つまり、カスタムプロパティはShadowDomを貫通し、親側の値を継承することができる!

  • 48

    基本コンポーネントで実際にレンダリングされた要素やクラスを対象(ブラウザで確認するとでてくるやつ)にするCSSに対してスタイル設定は可能か

    Salesforceでは、レンダリングされた出力に基づくスタイル設定はサポートされてない というかShadow境界を超えて基本コンポーネントに対してスタイル設定できないだけだと思う

  • 49

    ブループリントを利用してコンポーネントを作成する際、スタイル設定でやってはいけないことはなにか

    すでに設定されているSLDSクラスに対して、上書きをしてはいけない。 将来そのクラスが変更される可能性があるため かわりとしては、設計トークンを利用したカスタムClassを付与するなどを検討する!

  • 50

    属性セレクタにおけるアンチパターンを説明せよ

    Classやstyle属性の場合、 その値の文字列の完全一致をセレクタで行うと、うまく取得できない場合があるため 理由としては、SalesForceが空白や予期せぬ文字を付与してしまうことがあるらしい

  • 51

    カスタムコンポーネントの一貫したデザインを作成せるために何が利用可能か? カスタム設計トークン以外で答えよ

    CSSライブラリモジュールをimportできる。 /* Example */ @import "c/cssLibrary"; cssLibrary ├──cssLibrary.css └──cssLibrary.js-meta.xml

  • 52

    コンポーネントの構成について3つ説明せよ

    オーナー テンプレートを所有するコンポーネント コンテナ テンプレートの内側 親と子 そのまま

  • 53

    子コンポーネントに対して、公開プロパティの値を親側から設定する場合に気をつけることは?

    ケバブケースになる。 @api itemName に対して 親から item-name=“あああ“ で渡す

  • 54

    親から子に渡されるオブジェクトの制約事項はなにか?

    参照のみとなり、変更不可能(エラーがでる) データ変更するには浅いコピーをすればよい。

  • 55

    公開プロパティはオブジェクトデータ型に対応しているか

    対応している 推奨はされていない

  • 56

    公開プロパティに対してプリミティブ値を利用することが推奨されている理由は?

    単純にオブジェクト型だとインタフェースが複雑になり開発者でオブジェクト定義を共有しないといけないから 標準HTMLでは、属性に設定できるのは、プリミティブ型のみだから。  属性値に{オブジェクト}で渡すことができるのはLWCだけだから、想像しずらい仕様となる

  • 57

    親側から、子コンポーネントで定義したメソッドをコールしたい場合はどうするか?

    子コンポーネントでメソッドに対して@apiアノテーションを付与すると、メソッドを公開することができる。 例 子側 @api play() { なんかやる } 親側は this.template.querySelector("子コンポーネント").play(); でよべる また、戻り値を設定することで、親に値を渡すこともできる 他にパラメータを設定することで、@api公開プロパティを使用せずに子に値を渡すこともできる!

  • 58

    親側から子コンポーネントの値を取得する方法としてイベントバブルを利用しない手法はなにか

    公開メソッドをたたき、返却値を手に入れることができる。

  • 59

    親側から子側に値を渡す方法で、@api公開プロパティを利用しない方法はなにか?

    @api公開メソッドの引数に値を渡せば子側で受け取ることができる また、data-属性への値設定する方法もある。

  • 60

    カスタム子コンポーネントに対し、マークアップを渡す方法としてなにがあるか

    カスタム子コンポーネント側で、slotを作成する。 親側ではカスタム子コンポーネントの内部にマークアップを定義する 子側 <!-- slotDemo.html --> <template> <h1>Add content to slot</h1> <div> <slot></slot> </div> </template> 親側 <!-- slotWrapper.html --> <template> <c-slot-demo> <p>content from parent</p> </c-slot-demo> </template> slotにname属性を付与することで、親側からslot属性で割り当てるslotを選択することもできる <template> <p>First Name: <slot name="firstName">Default first name</slot></p> <p>Last Name: <slot name="lastName">Default last name</slot></p> <p>Description: <slot>Default description</slot></p> </template> <template> <c-item> <span slot={dynamicName}></span> </c-item> </template>

  • 61

    クエリセレクタは実際にどうやって利用するか

    シャドウツリー内部に対してセレクトする場合はthis.template.querySelector() を利用する

  • 62

    スロットで渡されてきた要素をクエリセレクタで取得する際はどうすればいいか?

    スロットで渡されるDOM要素はシャドウツリーの一部とならならず、DOMのホスト要素に直接追加される そのため、テンプレートを使用しない、this.querySelectorで取得する。

  • 63

    スロットを条件に応じてレンダリングするにはどうするか?

    lwc:if elseif else ディレクティブを使用し、それぞれslotタグを作成する。 従来のif:true false ディレクティブだとコンパイラが重複スロットと見なして、警告を発する

  • 64

    slot用のイベントはなにか 説明もせよ

    slotchangeイベント 直接の子ノードが追加、削除されると起動されるイベントである

  • 65

    slotchangeイベントを活用したLWCならではの実装方法は?

    テンプレートディレクティブを活用することで テンプレートが切り替わるごとに slotchangeイベントが呼び出されるようになる。

  • 66

    slotで渡されたマークアップなどのlight domを取得するクエリセレクタについて考慮事項をあげよ

    ShadowDomと比較して、検索範囲がコンポーネント(テンプレート)に限定されないので、別のlLightDomコンポーネントの要素やslotで渡された要素が取得されてしまう懸念がある 親側でShadow境界が作られてれば問題ない

  • 67

    クエリセレクタでも利用しているthisとは何を指すか

    実行コンテキストのこと つまり 今実行しているコンポーネント自身

  • 68

    LWCにおけるクエリセレクタの制限事項やベストプラクティスはなにか

    DOM要素のクエリでwindow documentは使用しないこと。 javascriptでDomを操作しないこと(推奨) →ディレクティブをつかえ スタイル設定はおけー!

  • 69

    クエリセレクタを使用せずにDOM要素を見つける方法としてなにがあるか

    HTMLでlwc:lef属性を追加し、値を割り当てると javascriptでとれるようになる <template> <div lwc:ref="myDiv"></div> </template> export default class extends LightningElement { renderedCallback() { console.log(this.refs.myDiv); } }

  • 70

    refを利用する場合の制限事項は? 二つ挙げよ

    とれてくる要素は参照のみの、プレーンなオブジェクトなので、そのオブジェクトの内部に対して変更や追加削除を行うとエラーがでる。 スロットやテンプレート、for:eachやiterator などのループ内の要素に対してref属性を付与することはできない。

  • 71

    クエリセレクタの原則として何があるか一つあげよ

    現在表示されているものしか取得しない。 (ディレクティブによって表示されてないものは取得対象とならない)

  • 72

    LightDOMについて説明せよ

    シャドウツリーではなく、ホスト要素にコンテンツが添付される。

  • 73

    LightDOMコンポーネントの制限事項は?

    配布できないらしい。 管理パッケージ内で名前空間の参照はcで行うから、LightDOMでは管理パッケージ内の資産と、ローカルの資産の切り分けができないみたいな感じ?らしい

  • 74

    LightDOMのメリットは?

    親コンポーネント側でスタイルの上書きが可能なこと サードパーティライブラリが使いやすい

  • 75

    LightDOMを有効化するには?

    static renderMode = "light" をコンポーネント内部で宣言し、 テンプレートで <template lwc:render-mode="light"> を利用する。 import { LightningElement } from "lwc"; export default class LightDomApp extends LightningElement { static renderMode = "light"; // the default is 'shadow' } <template lwc:render-mode="light"> <my-header> <p>Hello World</p> </my-header> </template>

  • 76

    まとめ ShadowDOMのコンポーネントに定義したコンテンツはそのコンポーネントのShadowツリーに追加される。 LightDOMコンポーネントのコンテンツやSlotに当てはめる用のコンテンツは、 Shadowツリーには追加されず、直接ホスト要素に追加される。 <template> <my-app> #shadow-root | <style> p { color: green; }</style> | <p>This is a paragraph in shadow DOM</p> | <my-container> | <p>This is a paragraph in light DOM</p> | </my-container> </my-app> </template>

    まとめ

  • 77

    ShadowDOMでカスタムイベントをディスパッチして親に伝播させる際、 どういった設定が必要か

    Shadow境界を超えてイベントを伝播させる場合は イベントのプロパティであるcomposed:trueにしておく必要がある デフォルトでなってる時もある ちなみにLightDOMでは必要なし

  • 78

    スロットで割り当てられた要素に対して、 子側のCSSのセレクタで、スタイル適用可能か

    できない。 子側のCSSのセレクタの対象はtemplete内部に対するもの(Shadowツリー)であるため。 ホスト要素に追加されたスロット要素はCSSからはセレクトできない。

  • 79

    @track でサポートされる型はなにか サポートされないのは?

    プレーンオブジェクト、配列 上記はネストされてても可能 サポートされないのは、Objectから継承するオブジェクトや、クラスインスタンス、Date Set Map など。

  • 80

    @trackでオブジェクトを利用する際の考慮事項はなにか

    前の表示サイクル中にアクセスしたプロパティしか変更検知してくれないということ。 つまり、オブジェクトのプロパティを追加しても、前の表示サイクルでアクセスしてないため、検知対象とならない。 配列は問題ない。

  • 81

    @trackをつけたオブジェクトに対し、プロパティを追加して再描画させたい。 どうするか?

    追加しても検知してくれないので、再度割り当てる this.obj ={ ...this.obj, value: ‘あああ‘};

  • 82

    標準ボタンコンポーネントでは、variant属性に渡された値はどうやって処理しているか?

    variant属性の値は入力apiで受け取り、 ノーマライズ(大文字→小文字変換や設定値がない場合にデフォルト値の設定)を行う。 それをもとに、文字列で各variantのスタイル定義されたクラスの値を定義し、 標準HTMLのボタンコンポーネントのクラス属性に設定する。

  • 83

    標準ボタングループコンポーネントはどのような仕様か?

    テンプレートはslotだけ用意している ホスト側からslotを通してボタンコンポーネントがわたってくる想定になっている ボタンコンポーネントのconnectedCallback処理で、カスタムイベントが飛ぶようになっており、 ボタングループではそれをキャッチし、ボタングループのプロパティにボタンコンポーネントを登録する(配列で管理してる) 補足として、コンストラクタでボタンから飛んでくるイベントのリスナーを登録している。 また上記の一連の処理で、 ボタン側は、自コンポーネントのプロパティにアクセスするメソッドを定義しており、ボタングループ側では、それを呼び出すことによって、orderプロパティや、ボタングループのプロパティを参照するdisconnect用のメソッドをボタン側のプロパティへに登録している。 ボタン側では、disconnectする際、そのメソッドを呼び出すことによって、ボタングループのプロパティのボタンを管理している配列から、そのボタンを削除している。

  • 84

    connectedCallbackが起動されるよりも前に処理を実行したい場合は?

    コンストラクタでやる。

  • 85

    ボタングループの処理で学んだテクニックは?

    this.をバインドした関数やアロー関数をイベントを介して親側に渡すことによって、親のオブジェクトから子コンポーネントを更新を行うことができ、、シームレスなやり取りができるテクニックといえる。 こういったメソッドをやり取りすることで、子からも親を更新することも可能

  • 86

    親と子がある場合、 コンストラクタとconnectedCallbackの実行順は?

    親のコンストラクタ実行→親のconnectedCallback→子のコンストラクタ実行→子のconnectedCallback

  • 87

    HTMLから呼ばれるjsのメソッド js 内部から呼ばれないメソッド メソッド名をどう表現すべきか

    privateなメソッド、変数は_をつける

  • 88

    特定のLightningコンポーネントが関係するカスタムコンポーネントやApexクラスを確認したい場合はなにをみればいいか

    設定からLightningコンポーネントで該当のLWCを確認すると、連動関係がみれる

  • 89

    Salesforceではスロットがない子コンポーネントに対し、親側でマークアップを渡すとどうなるか

    表示されない。 ただ、ネイティブshadow なら表示される

  • 90

    公開プロパティが設定されるたびにロジックを実行するにはどうするか? @apiアノテーションはどう設定するか?

    setterを定義する @apiアノテーションはgetterにだけつける

  • 91

    LWCに対して、HTMLグローバル属性(class titleとか)を使うのは推奨されてるか

    実はされてない 使うなら@apiでデコレートして入力としてサポートするようにしてほしいらしい。 ユーティリティクラス使う場合はdivとかで囲ったほうがいいかも

  • 92

    属性で渡ってくる値を設定する順番は渡された順番と同一であるか?

    いいえ 順不同で渡されてくる

  • 93

    javascriptコードを共有する二つの方法を答えよ

    コンポーネントと同じフォルダにjsファイルを作成し、相対パスでインポート サービスこんぽーねんとを作成し、c/componentName形式でインポート

  • 94

    一つのライブラリモジュールで複数のjsファイルをエクスポートするには?

    各jsファイルでもexportして フォルダ名と同名のjsファイルで まとめてexportする export { classSet} from ‘./classSet’; export * from ‘./banks’; アスタリスクをつかうと全部exportできる

  • 95

    サードパーティのjsライブラリなど、静的リソースにあるCSSやjsファイルを使用するにはどうすればよいか

    静的リソースにアップロードして importする import myLib from "@salesforce/resourceUrl/myLib"; platformResourceLoaderモジュールからメソッドをインポートする import { loadStyle, loadScript } from "lightning/platformResourceLoader"; インポートしてきたメソッドと実行コンテキストと静的リソースからの相対パスを指定して実行! loadScript(this, myLib + "/myLib.js").then(() => { let result = myLib.myFunction(2, 2); });

  • 96

    CSSをライブラリモジュールからインポートする時に気をつけることは

    同名のjsファイルが存在するとそちらが優先してimportされてしまうので注意 c/moduleNameとして読み込んだときに、 jsがなければ、cssを読み込むという順序で処理される

  • 97

    jsを利用したDomの操作は推奨されてないが、サードパーティライブラリなどで使用したい場合にはどうすればいいか?

    Dom操作対象のコンポーネントにたいして lwc:dom="manual"を利用する。 これを指定するとカプセル化を維持するらしい。 <template> <div lwc:dom="manual"></div> </template> これでこの要素に対してappendChildとかができる。

  • 98

    ライブラリを使用する際、組織設定にかかわるところで気をつけることはなにか

    Lightning Lockerを使用している場合は、 ライブラリに対して制限がある Lightning Webセキュリティならないとのこと

  • 99

    javascriptからAPIをコールすることは可能か?

    デフォルトではできないが、 CSP信頼済みサイトに登録し、ポリシーなどの変更が必要。 JavaScriptリソースを外部から読み込むことはできない(静的リソースでやれ)

  • 100

    JavaScriptがサポートしている唯一のAPIはなにか

    lightning Data Serviceのみ LDS以外のSalesforceApiは起動できない。(Apexでやれ)

  • その他

    その他

    谷峻輔 · 12問 · 2年前

    その他

    その他

    12問 • 2年前
    谷峻輔

    LWC2

    LWC2

    谷峻輔 · 28問 · 2年前

    LWC2

    LWC2

    28問 • 2年前
    谷峻輔

    Javascript

    Javascript

    谷峻輔 · 100問 · 2年前

    Javascript

    Javascript

    100問 • 2年前
    谷峻輔

    javascript2

    javascript2

    谷峻輔 · 58問 · 2年前

    javascript2

    javascript2

    58問 • 2年前
    谷峻輔

    js1 JavaScript の基礎

    js1 JavaScript の基礎

    谷峻輔 · 92問 · 2年前

    js1 JavaScript の基礎

    js1 JavaScript の基礎

    92問 • 2年前
    谷峻輔

    js2 コード品質、オブジェクト基本、データ型

    js2 コード品質、オブジェクト基本、データ型

    谷峻輔 · 100問 · 2年前

    js2 コード品質、オブジェクト基本、データ型

    js2 コード品質、オブジェクト基本、データ型

    100問 • 2年前
    谷峻輔

    js3 データ型

    js3 データ型

    谷峻輔 · 100問 · 2年前

    js3 データ型

    js3 データ型

    100問 • 2年前
    谷峻輔

    js4 データ型、関数の高度な機能

    js4 データ型、関数の高度な機能

    谷峻輔 · 100問 · 2年前

    js4 データ型、関数の高度な機能

    js4 データ型、関数の高度な機能

    100問 • 2年前
    谷峻輔

    js5 関数の高度な機能 オブジェクトプロパティの設定 プロトタイプ, 継承プロトタイプ, 継承、クラス

    js5 関数の高度な機能 オブジェクトプロパティの設定 プロトタイプ, 継承プロトタイプ, 継承、クラス

    谷峻輔 · 96問 · 2年前

    js5 関数の高度な機能 オブジェクトプロパティの設定 プロトタイプ, 継承プロトタイプ, 継承、クラス

    js5 関数の高度な機能 オブジェクトプロパティの設定 プロトタイプ, 継承プロトタイプ, 継承、クラス

    96問 • 2年前
    谷峻輔

    js6 クラス Promise, async/await

    js6 クラス Promise, async/await

    谷峻輔 · 100問 · 2年前

    js6 クラス Promise, async/await

    js6 クラス Promise, async/await

    100問 • 2年前
    谷峻輔

    js7 Promise, async/await、ジェネレータ, 高度なイテレーション、モジュール

    js7 Promise, async/await、ジェネレータ, 高度なイテレーション、モジュール

    谷峻輔 · 96問 · 2年前

    js7 Promise, async/await、ジェネレータ, 高度なイテレーション、モジュール

    js7 Promise, async/await、ジェネレータ, 高度なイテレーション、モジュール

    96問 • 2年前
    谷峻輔

    js8 その他

    js8 その他

    谷峻輔 · 57問 · 2年前

    js8 その他

    js8 その他

    57問 • 2年前
    谷峻輔

    Javaとは〜

    Javaとは〜

    谷峻輔 · 83問 · 2年前

    Javaとは〜

    Javaとは〜

    83問 • 2年前
    谷峻輔

    Reactクイックスタート

    Reactクイックスタート

    谷峻輔 · 15問 · 2年前

    Reactクイックスタート

    Reactクイックスタート

    15問 • 2年前
    谷峻輔

    デザインパターン

    デザインパターン

    谷峻輔 · 5問 · 2年前

    デザインパターン

    デザインパターン

    5問 • 2年前
    谷峻輔

    承認申請

    承認申請

    谷峻輔 · 16問 · 2年前

    承認申請

    承認申請

    16問 • 2年前
    谷峻輔

    アプリケーションビルダー2

    アプリケーションビルダー2

    谷峻輔 · 100問 · 2年前

    アプリケーションビルダー2

    アプリケーションビルダー2

    100問 • 2年前
    谷峻輔

    アプリケーションビルダー3

    アプリケーションビルダー3

    谷峻輔 · 100問 · 2年前

    アプリケーションビルダー3

    アプリケーションビルダー3

    100問 • 2年前
    谷峻輔

    アプリケーションビルダー4

    アプリケーションビルダー4

    谷峻輔 · 100問 · 2年前

    アプリケーションビルダー4

    アプリケーションビルダー4

    100問 • 2年前
    谷峻輔

    アプリケーションビルダー5

    アプリケーションビルダー5

    谷峻輔 · 94問 · 2年前

    アプリケーションビルダー5

    アプリケーションビルダー5

    94問 • 2年前
    谷峻輔

    アプリケーションビルダー6

    アプリケーションビルダー6

    谷峻輔 · 100問 · 2年前

    アプリケーションビルダー6

    アプリケーションビルダー6

    100問 • 2年前
    谷峻輔

    アプリケーションビルダー7

    アプリケーションビルダー7

    谷峻輔 · 100問 · 2年前

    アプリケーションビルダー7

    アプリケーションビルダー7

    100問 • 2年前
    谷峻輔

    アプリケーションビルダー8

    アプリケーションビルダー8

    谷峻輔 · 98問 · 2年前

    アプリケーションビルダー8

    アプリケーションビルダー8

    98問 • 2年前
    谷峻輔

    アプリケーションビルダー9

    アプリケーションビルダー9

    谷峻輔 · 70問 · 2年前

    アプリケーションビルダー9

    アプリケーションビルダー9

    70問 • 2年前
    谷峻輔

    フロー

    フロー

    谷峻輔 · 42問 · 2年前

    フロー

    フロー

    42問 • 2年前
    谷峻輔

    レポート、ダッシュボード

    レポート、ダッシュボード

    谷峻輔 · 60問 · 2年前

    レポート、ダッシュボード

    レポート、ダッシュボード

    60問 • 2年前
    谷峻輔

    SalesCloud

    SalesCloud

    谷峻輔 · 18問 · 2年前

    SalesCloud

    SalesCloud

    18問 • 2年前
    谷峻輔

    標準機能

    標準機能

    谷峻輔 · 72問 · 2年前

    標準機能

    標準機能

    72問 • 2年前
    谷峻輔

    宣言的開発

    宣言的開発

    谷峻輔 · 8問 · 2年前

    宣言的開発

    宣言的開発

    8問 • 2年前
    谷峻輔

    数式、人力規則

    数式、人力規則

    谷峻輔 · 18問 · 2年前

    数式、人力規則

    数式、人力規則

    18問 • 2年前
    谷峻輔

    アクセスレベル

    アクセスレベル

    谷峻輔 · 63問 · 2年前

    アクセスレベル

    アクセスレベル

    63問 • 2年前
    谷峻輔

    データ型変換

    データ型変換

    谷峻輔 · 22問 · 2年前

    データ型変換

    データ型変換

    22問 • 2年前
    谷峻輔

    オブジェクト、項目

    オブジェクト、項目

    谷峻輔 · 91問 · 2年前

    オブジェクト、項目

    オブジェクト、項目

    91問 • 2年前
    谷峻輔

    アプリ、タブ

    アプリ、タブ

    谷峻輔 · 92問 · 2年前

    アプリ、タブ

    アプリ、タブ

    92問 • 2年前
    谷峻輔

    自動化

    自動化

    谷峻輔 · 17問 · 2年前

    自動化

    自動化

    17問 • 2年前
    谷峻輔

    組織、開発モデル

    組織、開発モデル

    谷峻輔 · 65問 · 2年前

    組織、開発モデル

    組織、開発モデル

    65問 • 2年前
    谷峻輔

    ボタン、アクション

    ボタン、アクション

    谷峻輔 · 69問 · 2年前

    ボタン、アクション

    ボタン、アクション

    69問 • 2年前
    谷峻輔

    インテグレーション

    インテグレーション

    谷峻輔 · 40問 · 2年前

    インテグレーション

    インテグレーション

    40問 • 2年前
    谷峻輔

    ページレイアウト、リストビュー、レコードタイプ、プロセス

    ページレイアウト、リストビュー、レコードタイプ、プロセス

    谷峻輔 · 46問 · 2年前

    ページレイアウト、リストビュー、レコードタイプ、プロセス

    ページレイアウト、リストビュー、レコードタイプ、プロセス

    46問 • 2年前
    谷峻輔

    標準オブジェクト

    標準オブジェクト

    谷峻輔 · 42問 · 2年前

    標準オブジェクト

    標準オブジェクト

    42問 • 2年前
    谷峻輔

    ServiceCloud

    ServiceCloud

    谷峻輔 · 16問 · 2年前

    ServiceCloud

    ServiceCloud

    16問 • 2年前
    谷峻輔

    ユーザ、ライセンス、プロファイル、権限セット

    ユーザ、ライセンス、プロファイル、権限セット

    谷峻輔 · 41問 · 2年前

    ユーザ、ライセンス、プロファイル、権限セット

    ユーザ、ライセンス、プロファイル、権限セット

    41問 • 2年前
    谷峻輔

    データインポート、エクスポート

    データインポート、エクスポート

    谷峻輔 · 3回閲覧 · 12問 · 2年前

    データインポート、エクスポート

    データインポート、エクスポート

    3回閲覧 • 12問 • 2年前
    谷峻輔

    Chatter

    Chatter

    谷峻輔 · 21問 · 2年前

    Chatter

    Chatter

    21問 • 2年前
    谷峻輔

    承認申請

    承認申請

    谷峻輔 · 15問 · 2年前

    承認申請

    承認申請

    15問 • 2年前
    谷峻輔

    フロー

    フロー

    谷峻輔 · 44問 · 2年前

    フロー

    フロー

    44問 • 2年前
    谷峻輔

    レポート、ダッシュボード

    レポート、ダッシュボード

    谷峻輔 · 65問 · 2年前

    レポート、ダッシュボード

    レポート、ダッシュボード

    65問 • 2年前
    谷峻輔

    SalesCloud

    SalesCloud

    谷峻輔 · 18問 · 2年前

    SalesCloud

    SalesCloud

    18問 • 2年前
    谷峻輔

    標準機能

    標準機能

    谷峻輔 · 72問 · 2年前

    標準機能

    標準機能

    72問 • 2年前
    谷峻輔

    宣言的開発

    宣言的開発

    谷峻輔 · 8問 · 2年前

    宣言的開発

    宣言的開発

    8問 • 2年前
    谷峻輔

    アクセスレベル

    アクセスレベル

    谷峻輔 · 52問 · 2年前

    アクセスレベル

    アクセスレベル

    52問 • 2年前
    谷峻輔

    数式、人力規則

    数式、人力規則

    谷峻輔 · 17問 · 2年前

    数式、人力規則

    数式、人力規則

    17問 • 2年前
    谷峻輔

    データ型変換

    データ型変換

    谷峻輔 · 22問 · 2年前

    データ型変換

    データ型変換

    22問 • 2年前
    谷峻輔

    オブジェクト、項目

    オブジェクト、項目

    谷峻輔 · 89問 · 2年前

    オブジェクト、項目

    オブジェクト、項目

    89問 • 2年前
    谷峻輔

    アプリ、タブ

    アプリ、タブ

    谷峻輔 · 100問 · 2年前

    アプリ、タブ

    アプリ、タブ

    100問 • 2年前
    谷峻輔

    自動化

    自動化

    谷峻輔 · 18問 · 2年前

    自動化

    自動化

    18問 • 2年前
    谷峻輔

    組織、開発モデル

    組織、開発モデル

    谷峻輔 · 60問 · 2年前

    組織、開発モデル

    組織、開発モデル

    60問 • 2年前
    谷峻輔

    ボタン、アクション

    ボタン、アクション

    谷峻輔 · 69問 · 2年前

    ボタン、アクション

    ボタン、アクション

    69問 • 2年前
    谷峻輔

    インテグレーション

    インテグレーション

    谷峻輔 · 40問 · 2年前

    インテグレーション

    インテグレーション

    40問 • 2年前
    谷峻輔

    ページレイアウト、リストビュー、レコードタイプ、プロセス

    ページレイアウト、リストビュー、レコードタイプ、プロセス

    谷峻輔 · 44問 · 2年前

    ページレイアウト、リストビュー、レコードタイプ、プロセス

    ページレイアウト、リストビュー、レコードタイプ、プロセス

    44問 • 2年前
    谷峻輔

    標準オブジェクト

    標準オブジェクト

    谷峻輔 · 32問 · 2年前

    標準オブジェクト

    標準オブジェクト

    32問 • 2年前
    谷峻輔

    ServiceCloud

    ServiceCloud

    谷峻輔 · 17問 · 2年前

    ServiceCloud

    ServiceCloud

    17問 • 2年前
    谷峻輔

    ユーザ、ライセンス、プロファイル、権限セット

    ユーザ、ライセンス、プロファイル、権限セット

    谷峻輔 · 18問 · 2年前

    ユーザ、ライセンス、プロファイル、権限セット

    ユーザ、ライセンス、プロファイル、権限セット

    18問 • 2年前
    谷峻輔

    データインポート、エクスポート

    データインポート、エクスポート

    谷峻輔 · 11問 · 2年前

    データインポート、エクスポート

    データインポート、エクスポート

    11問 • 2年前
    谷峻輔

    Chatter

    Chatter

    谷峻輔 · 21問 · 2年前

    Chatter

    Chatter

    21問 • 2年前
    谷峻輔

    一時

    一時

    谷峻輔 · 89問 · 2年前

    一時

    一時

    89問 • 2年前
    谷峻輔

    一時2

    一時2

    谷峻輔 · 29問 · 2年前

    一時2

    一時2

    29問 • 2年前
    谷峻輔

    js9 ドキュメント

    js9 ドキュメント

    谷峻輔 · 80問 · 2年前

    js9 ドキュメント

    js9 ドキュメント

    80問 • 2年前
    谷峻輔

    問題一覧

  • 1

    コンポーネントが表示を行うとき(ブラウザコンソールで確認したとき)、<template>タグはどうなるか

    <namespace-component-name>に置き換えられる

  • 2

    独自のコンポーネントを参照する際、 名前空間は何を指定するか

    c デフォルト名前空間と呼ばれている。 コンポーネントを呼び出す際は、 c-my-component

  • 3

    importステートメントを利用すると何ができるようになるか import対象を3つあげよ

    モジュールで宣言されたクラス、関数、変数をインポートして利用できる

  • 4

    exportステートメントを利用するとなにがでにるか

    モジュールで宣言したクラス、関数、変数を他のコードで利用可能にできる

  • 5

    import {LightningElement } from ‘lwc’ におけるlwc とLightningElementについて説明せよ また何をしているか説明せよ

    lwcはLWCのコアモジュール LightningElementは標準HTML要素のカスタムラッパー lwcモジュールからLightningElementをインポートしている

  • 6

    export default Class MyComponent extends LightningElement について、なぜexport defaultしているか説明せよ

    そのコンポーネントを他のコンポーネントで利用可能とするため

  • 7

    LWCコンポーネントのモジュールで他の変数や関数はエクスポートできるか?

    サポートされていない。 エクスポート可能なのはLightningElementを継承したクラスのみ

  • 8

    コンポーネント間でコードを共有するにはどうするか

    サービスコンポーネントを作成し、 変数や関数をエクスポートする。

  • 9

    CSSをコンポーネント間で共有するにはどうするか

    CSSファイルと設定ファイルのみを含むモジュールを作成し、LWCのCSSファイルにそのモジュールをインポートする CSSを静的リソースにあげるのもありか?

  • 10

    LWCのカスタムアイコンを組み込むには、どうするか? また制限はあるか?

    SVGリソースをLWCと同じ名前で作成し、同じフォルダに追加する。 フォルダあたり1つまで。

  • 11

    テンプレートタグの中にテンプレートタグを含めれるか?

    ディレクティブである必要があるが、含めることができる。

  • 12

    HTMLから、person[2].name[‘John’] のような添え字や文字列でのJavaScriptへのアクセスは可能か

    できない。 アクセスするにはドット表記のみ person.firstNameみたいな

  • 13

    ChangeHandlerメソッドが起動した後、 再描画されるプロパティはどれか?

    greeting currentDate1 再描画時に、ゲッターやセッターなどの式は再評価される。 プロパティは再評価されない

  • 14

    あるバインドした真偽値から表示するコンポネートを動的に制御するにはどうするか?

    <template lwc:if={property}> ディレクティブを使用する elseif elseもある

  • 15

    リアクティビティな項目とはなにか?

    HTMLのテンプレートで利用されているLWC(JavaScript)のプロパティ HTMLのテンプレートで利用されているgetterメソッドの中で使用されている LWC(JavaScript)のプロパティ ※直接HTMLテンプレートで利用してなくてもgetterを通して間接的に利用していればリアクティブとなる。

  • 16

    リアクティブな項目が変更されるとどうなるか?

    コンポーネントが再表示される。 再表示されると、すべての式が再表示される。プロパティは再評価されない (つまりgetter関数が再実行される。) renderedCallback()ライフサイクルフックが実行される。

  • 17

    リアクティブな項目の検知方法はどうやってやっているか?

    ===で変更前と変更後をチェックされる。 等価ではなく、値のIDを比較する。 よって、オブジェクト内部の変更まではチェックされない。

  • 18

    オブジェクトや配列などのデータを操作する場合、変更を検出させるにはどうしたらよいか 二通り示せ

    新しいオブジェクトを作成して再度項目に割り当てる。 @trackデコレータを利用することで内部まで項目値の変更を深く追跡させるようにする。

  • 19

    配列の中身を反復して表示に使用できるfor eachディレクティブはどのように記載するか 例をかけ テンプレートタグには、属性⚪︎⚪︎を指定し、 中身では、属性⚪︎⚪︎を指定し、⚪︎⚪︎を表示することができる。

    for:each={items} for:item="item" for:index="idx" key={item.id} {idx}:{item} <template for:each={items} for:item="item" for:index="idx"> <p key={item.id}>{idx}:{item}</p> </template>

  • 20

    for eachディレクティブにおけるkey属性の役割はなにか

    リストの中身が変更された際、keyを利用して変更箇所を特定し再描画する。 keyは文字列か数値のみで一意である必要がある。 keyごとに要素を管理しているということ

  • 21

    for each以外に繰り返しが可能なディレクティブはなにか? またどういう状況で利用するか

    iteratorディレクティブ 最初の要素と最後の要素の振る舞いを変えることができる。 最初の要素と最後の要素の識別が可能!

  • 22

    iteratorを使った例を記載せよ

    <template iterator:it={contacts}> <li key={it.value.Id}> <div if:true={it.first} class="list-first"></div> {it.value.Name}, {it.value.Title} <div if:true={it.last} class="list-last"></div> </li> </template> ※例では記載ないがindexも指定可能 この例では、スタイルを適用することで、 一番上と一番下にボーダーを表示することができる

  • 23

    複数のHTMLがあり、どちらを表示するかを初期表示時に指定した条件で選択可能にする方法としてなにがあるか

    そのコンポーネントのJavaScriptで、複数のHTMLを同フォルダからインポートし、 render()メソッドを定義し、条件に応じて返却値にHTMLを返す https://developer.salesforce.com/docs/platform/lwc/guide/create-render.html

  • 24

    LWC標準コンポーネントに対して、SLDSでみつけたスタイルを適用したい。 どうすればよいか

    SLDSの該当コンポーネントのVariationsセクションを確認し、 記載があるものは、標準コンポーネントでvariant属性で指定することで、そのスタイルが利用できる

  • 25

    コンポーネントのスペーシング(位置揃え、パディング、余白、タイポグラフィなど)を変更するには何を使用すればよいか

    SLDSのユーティリティクラスを利用する。 具体的には、上記から探したクラスをコンポーネントのクラスに適用する。 https://www.lightningdesignsystem.com/utilities/alignment/

  • 26

    標準コンポーネントに対してVariantによる変更ではなく、背景色など細かい変更を行うのに適している設定方法とはなにか

    SLDSスタイル設定フックを利用する

  • 27

    SLDSスタイル設定フックはどうやって利用するか?

    SLDSのStyleHooks Overviewにて該当コンポーネントのバリエーションにあう(ある場合)スタイルフックを使用する。 使用する際はホストに対して適用すれば、テンプレート内のすべてのコンポーネントにスタイルが適用される。(子コンポーネントへもスタイルが適用される シャドウルートを貫通する) 補足として、標準コンポーネントでは CSSカスタムプロパティとして、スタイルを利用しているため、プレースホルダーとして活用している。 :host { --slds-c-button-brand-color-background: orange; --slds-c-button-brand-color-border: orange; /* Other CSS custom properties here */ }

  • 28

    使用事例に合う基本コンポーネントがみつらがない場合はどうするか?

    もっとも近いSLDSブループリントをみつけて独自のコンポーネントを作成する

  • 29

    SLDSブループリントからコンポーネントを作成する際に確認しておくことは?

    SLDSブループリントのタイトルの下にあるデバイスサポートの詳細を確認する (アダプティブ レスポンシブ、デスクトップ専用)

  • 30

    アダプティブとレスポンシブの違いは

    アダプティブはデスクトップ用と非デスクトップ用のマークアップが定義されている。 レスポンシブはマークアップは1つで、画面サイズに合わせて拡大縮小される

  • 31

    SLDSブループリントが基本コンポーネントと対応しているか、どうやって確認するか

    sldsブループリントページの右上にlightningComponentボタンがある場合は対応している

  • 32

    ブループリントを使用してカスタムコンポーネントを作成する手順はどんなかんじか?

    ブループリントをコピーし、テンプレートへ貼り付ける ブループリントの中身で、アイコンなど基本コンポーネントに置き換え可能なものは置き換える あとはjavascriptで表示メッセージなどを制御できるようにかえる

  • 33

    あるコンポーネントについて、ある条件に基づいて動的にスタイルやバリエーションを変更するにはどうするか?

    そのコンポーネントのclassやVariant属性の値に対して{}でバインドし、JavaScriptで制御する

  • 34

    CSSであるクラスを作成し、空白やスペース設定の値、フォントサイズや色など、lightning designのパターンを利用する場合はどうするか?

    設計トークンを利用する —lwcプレフィックスがついている CSSカスタムプロパティで宣言する div { margin-right: var(--lwc-spacingSmall); } https://www.lightningdesignsystem.com/design-tokens/

  • 35

    設計トークンを利用した際、実際の値に置き換えられるタイミングはいつか

    コンパイル時に置き換えられるため、 CSSStyleDeclaration.getPropertyValue()メソッドでCSSプロパティの値を得ると、置き換えられた文字列が取得される

  • 36

    複数のカスタムコンポーネントでデザインの一貫性を確保するために、何が利用できるか、CSSスタイルルールの共有以外でこたえよ

    カスタムAuraトークンを定義し、利用する <aura:tokens> <aura:token name="myBackgroundColor" value="#f4f6f9" /> </aura:tokens> /* myLightningWebComponent.css */ color: var(--c-myBackgroundColor); --c プレフィックスで参照可能

  • 37

    コンポーネントのスタイルシートで定義されたスタイルの範囲はどこまでか

    そのコンポーネントに限定される。

  • 38

    子コンポーネントのスタイル反映に関して説明せよ

    子コンポーネントの内部コンポーネントに対するスタイルの適用はできないが、子コンポーネントを一つの要素としてスタイル設定はできる。

  • 39

    子コンポーネントそのものに対してスタイル適用する場合はどうするか 親側と子側で説明せよ

    親側は 子コンポーネントのセレクタでスタイル設定する 子側は:hostセレクタでコンポーネントそのものにスタイル設定できる (:hostは親側から設定するみたいな認識)

  • 40

    子コンポーネントに対して、特定のクラスが付与されている場合のみ、親側からセレクタを利用してスタイル設定ではなく、子側からスタイル設定するにはどうするか

    :host(.クラス名)セレクタを利用する。 親側からセレクタで子コンポーネントにスタイル設定したのと同等 シャドウホストがセレクタにマッチする場合に適用される。 これを利用することで、子コンポーネント側からは自身に対してどのような設定が親から行われているかで、スタイル設定が可能である。 どういう時につかうかはわからん 標準コンポーネントではvariantのスタイル適用はjavascriptで制御しているし。

  • 41

    Shadowに関連するセレクタでサポートされていないのはなにか

    :host-context(セレクタ) ShadowホストがあるHTMLに対してセレクタを実行する。 ::part(セレクタ) 親側からShadowコンポーネントの要素にスタイル適用するのに使用する ネイティブShadowになれば対応するかも

  • 42

    Shadowに関連するセレクタでサポート外があるのはなぜか

    salesforceが合成Shadowプロフィルを使用しているから。 将来的ににネイティブShadowになる予定らしい

  • 43

    salesforceではセレクタで機能しないのはどんなセレクタか

    Idセレクタ テンプレート表示時に、idの値がグローバル一意値に変換される場合があるため

  • 44

    カスタム公開プロパティ(@api)に属性セレクタは利用可能か?

    利用可能ではない。 @apiで定義した変数は確かに利用する時属性とて扱うが、LWCエンジンでは属性名をキャメルケースに自動変換されるため、取得できない。 代替手段としてはdata-を使用し、属性セレクタで取得するなどがある

  • 45

    data属性はどういう場合に利用するか

    親側からHTMLで、子コンポーネントに対して変数を付与したいときに利用できる data-sub=‘aaa’ で属性設定すると、 そのオブジェクトの要素.dataset.subで取得できる。 それで子側のコンポーネントで振る舞いをかえてもいいし、 ただ単種に一意の値として、属性セレクタで取得するためのラベル付けとして利用するのもあり

  • 46

    カスタムコンポーネントに対してスタイル設定フックを公開するにはどうするか?

    スタイルフックを公開したい要素に対してカスタムプロパティを設定する。 ちなみに第二引数はデフォルト値として機能する .light { background-color: var(--light-theme-background-color, lightcyan); } 親側のコンポーネントで以下のような設定をすると、子コンポーネントに対してスタイル設定可能 :host { --light-theme-backgroud-color: honeydew;

  • 47

    CSSカスタムプロパティに対して設定したスタイルフックは、子コンポーネントの内部要素に対して直接スタイル設定するのとどのような違いがあるか

    子コンポーネントの内部要素に対してスタイル設定はできないが、 CSSカスタムプロパティを公開しておくと、親側からスタイルを適用することができる! つまり、カスタムプロパティはShadowDomを貫通し、親側の値を継承することができる!

  • 48

    基本コンポーネントで実際にレンダリングされた要素やクラスを対象(ブラウザで確認するとでてくるやつ)にするCSSに対してスタイル設定は可能か

    Salesforceでは、レンダリングされた出力に基づくスタイル設定はサポートされてない というかShadow境界を超えて基本コンポーネントに対してスタイル設定できないだけだと思う

  • 49

    ブループリントを利用してコンポーネントを作成する際、スタイル設定でやってはいけないことはなにか

    すでに設定されているSLDSクラスに対して、上書きをしてはいけない。 将来そのクラスが変更される可能性があるため かわりとしては、設計トークンを利用したカスタムClassを付与するなどを検討する!

  • 50

    属性セレクタにおけるアンチパターンを説明せよ

    Classやstyle属性の場合、 その値の文字列の完全一致をセレクタで行うと、うまく取得できない場合があるため 理由としては、SalesForceが空白や予期せぬ文字を付与してしまうことがあるらしい

  • 51

    カスタムコンポーネントの一貫したデザインを作成せるために何が利用可能か? カスタム設計トークン以外で答えよ

    CSSライブラリモジュールをimportできる。 /* Example */ @import "c/cssLibrary"; cssLibrary ├──cssLibrary.css └──cssLibrary.js-meta.xml

  • 52

    コンポーネントの構成について3つ説明せよ

    オーナー テンプレートを所有するコンポーネント コンテナ テンプレートの内側 親と子 そのまま

  • 53

    子コンポーネントに対して、公開プロパティの値を親側から設定する場合に気をつけることは?

    ケバブケースになる。 @api itemName に対して 親から item-name=“あああ“ で渡す

  • 54

    親から子に渡されるオブジェクトの制約事項はなにか?

    参照のみとなり、変更不可能(エラーがでる) データ変更するには浅いコピーをすればよい。

  • 55

    公開プロパティはオブジェクトデータ型に対応しているか

    対応している 推奨はされていない

  • 56

    公開プロパティに対してプリミティブ値を利用することが推奨されている理由は?

    単純にオブジェクト型だとインタフェースが複雑になり開発者でオブジェクト定義を共有しないといけないから 標準HTMLでは、属性に設定できるのは、プリミティブ型のみだから。  属性値に{オブジェクト}で渡すことができるのはLWCだけだから、想像しずらい仕様となる

  • 57

    親側から、子コンポーネントで定義したメソッドをコールしたい場合はどうするか?

    子コンポーネントでメソッドに対して@apiアノテーションを付与すると、メソッドを公開することができる。 例 子側 @api play() { なんかやる } 親側は this.template.querySelector("子コンポーネント").play(); でよべる また、戻り値を設定することで、親に値を渡すこともできる 他にパラメータを設定することで、@api公開プロパティを使用せずに子に値を渡すこともできる!

  • 58

    親側から子コンポーネントの値を取得する方法としてイベントバブルを利用しない手法はなにか

    公開メソッドをたたき、返却値を手に入れることができる。

  • 59

    親側から子側に値を渡す方法で、@api公開プロパティを利用しない方法はなにか?

    @api公開メソッドの引数に値を渡せば子側で受け取ることができる また、data-属性への値設定する方法もある。

  • 60

    カスタム子コンポーネントに対し、マークアップを渡す方法としてなにがあるか

    カスタム子コンポーネント側で、slotを作成する。 親側ではカスタム子コンポーネントの内部にマークアップを定義する 子側 <!-- slotDemo.html --> <template> <h1>Add content to slot</h1> <div> <slot></slot> </div> </template> 親側 <!-- slotWrapper.html --> <template> <c-slot-demo> <p>content from parent</p> </c-slot-demo> </template> slotにname属性を付与することで、親側からslot属性で割り当てるslotを選択することもできる <template> <p>First Name: <slot name="firstName">Default first name</slot></p> <p>Last Name: <slot name="lastName">Default last name</slot></p> <p>Description: <slot>Default description</slot></p> </template> <template> <c-item> <span slot={dynamicName}></span> </c-item> </template>

  • 61

    クエリセレクタは実際にどうやって利用するか

    シャドウツリー内部に対してセレクトする場合はthis.template.querySelector() を利用する

  • 62

    スロットで渡されてきた要素をクエリセレクタで取得する際はどうすればいいか?

    スロットで渡されるDOM要素はシャドウツリーの一部とならならず、DOMのホスト要素に直接追加される そのため、テンプレートを使用しない、this.querySelectorで取得する。

  • 63

    スロットを条件に応じてレンダリングするにはどうするか?

    lwc:if elseif else ディレクティブを使用し、それぞれslotタグを作成する。 従来のif:true false ディレクティブだとコンパイラが重複スロットと見なして、警告を発する

  • 64

    slot用のイベントはなにか 説明もせよ

    slotchangeイベント 直接の子ノードが追加、削除されると起動されるイベントである

  • 65

    slotchangeイベントを活用したLWCならではの実装方法は?

    テンプレートディレクティブを活用することで テンプレートが切り替わるごとに slotchangeイベントが呼び出されるようになる。

  • 66

    slotで渡されたマークアップなどのlight domを取得するクエリセレクタについて考慮事項をあげよ

    ShadowDomと比較して、検索範囲がコンポーネント(テンプレート)に限定されないので、別のlLightDomコンポーネントの要素やslotで渡された要素が取得されてしまう懸念がある 親側でShadow境界が作られてれば問題ない

  • 67

    クエリセレクタでも利用しているthisとは何を指すか

    実行コンテキストのこと つまり 今実行しているコンポーネント自身

  • 68

    LWCにおけるクエリセレクタの制限事項やベストプラクティスはなにか

    DOM要素のクエリでwindow documentは使用しないこと。 javascriptでDomを操作しないこと(推奨) →ディレクティブをつかえ スタイル設定はおけー!

  • 69

    クエリセレクタを使用せずにDOM要素を見つける方法としてなにがあるか

    HTMLでlwc:lef属性を追加し、値を割り当てると javascriptでとれるようになる <template> <div lwc:ref="myDiv"></div> </template> export default class extends LightningElement { renderedCallback() { console.log(this.refs.myDiv); } }

  • 70

    refを利用する場合の制限事項は? 二つ挙げよ

    とれてくる要素は参照のみの、プレーンなオブジェクトなので、そのオブジェクトの内部に対して変更や追加削除を行うとエラーがでる。 スロットやテンプレート、for:eachやiterator などのループ内の要素に対してref属性を付与することはできない。

  • 71

    クエリセレクタの原則として何があるか一つあげよ

    現在表示されているものしか取得しない。 (ディレクティブによって表示されてないものは取得対象とならない)

  • 72

    LightDOMについて説明せよ

    シャドウツリーではなく、ホスト要素にコンテンツが添付される。

  • 73

    LightDOMコンポーネントの制限事項は?

    配布できないらしい。 管理パッケージ内で名前空間の参照はcで行うから、LightDOMでは管理パッケージ内の資産と、ローカルの資産の切り分けができないみたいな感じ?らしい

  • 74

    LightDOMのメリットは?

    親コンポーネント側でスタイルの上書きが可能なこと サードパーティライブラリが使いやすい

  • 75

    LightDOMを有効化するには?

    static renderMode = "light" をコンポーネント内部で宣言し、 テンプレートで <template lwc:render-mode="light"> を利用する。 import { LightningElement } from "lwc"; export default class LightDomApp extends LightningElement { static renderMode = "light"; // the default is 'shadow' } <template lwc:render-mode="light"> <my-header> <p>Hello World</p> </my-header> </template>

  • 76

    まとめ ShadowDOMのコンポーネントに定義したコンテンツはそのコンポーネントのShadowツリーに追加される。 LightDOMコンポーネントのコンテンツやSlotに当てはめる用のコンテンツは、 Shadowツリーには追加されず、直接ホスト要素に追加される。 <template> <my-app> #shadow-root | <style> p { color: green; }</style> | <p>This is a paragraph in shadow DOM</p> | <my-container> | <p>This is a paragraph in light DOM</p> | </my-container> </my-app> </template>

    まとめ

  • 77

    ShadowDOMでカスタムイベントをディスパッチして親に伝播させる際、 どういった設定が必要か

    Shadow境界を超えてイベントを伝播させる場合は イベントのプロパティであるcomposed:trueにしておく必要がある デフォルトでなってる時もある ちなみにLightDOMでは必要なし

  • 78

    スロットで割り当てられた要素に対して、 子側のCSSのセレクタで、スタイル適用可能か

    できない。 子側のCSSのセレクタの対象はtemplete内部に対するもの(Shadowツリー)であるため。 ホスト要素に追加されたスロット要素はCSSからはセレクトできない。

  • 79

    @track でサポートされる型はなにか サポートされないのは?

    プレーンオブジェクト、配列 上記はネストされてても可能 サポートされないのは、Objectから継承するオブジェクトや、クラスインスタンス、Date Set Map など。

  • 80

    @trackでオブジェクトを利用する際の考慮事項はなにか

    前の表示サイクル中にアクセスしたプロパティしか変更検知してくれないということ。 つまり、オブジェクトのプロパティを追加しても、前の表示サイクルでアクセスしてないため、検知対象とならない。 配列は問題ない。

  • 81

    @trackをつけたオブジェクトに対し、プロパティを追加して再描画させたい。 どうするか?

    追加しても検知してくれないので、再度割り当てる this.obj ={ ...this.obj, value: ‘あああ‘};

  • 82

    標準ボタンコンポーネントでは、variant属性に渡された値はどうやって処理しているか?

    variant属性の値は入力apiで受け取り、 ノーマライズ(大文字→小文字変換や設定値がない場合にデフォルト値の設定)を行う。 それをもとに、文字列で各variantのスタイル定義されたクラスの値を定義し、 標準HTMLのボタンコンポーネントのクラス属性に設定する。

  • 83

    標準ボタングループコンポーネントはどのような仕様か?

    テンプレートはslotだけ用意している ホスト側からslotを通してボタンコンポーネントがわたってくる想定になっている ボタンコンポーネントのconnectedCallback処理で、カスタムイベントが飛ぶようになっており、 ボタングループではそれをキャッチし、ボタングループのプロパティにボタンコンポーネントを登録する(配列で管理してる) 補足として、コンストラクタでボタンから飛んでくるイベントのリスナーを登録している。 また上記の一連の処理で、 ボタン側は、自コンポーネントのプロパティにアクセスするメソッドを定義しており、ボタングループ側では、それを呼び出すことによって、orderプロパティや、ボタングループのプロパティを参照するdisconnect用のメソッドをボタン側のプロパティへに登録している。 ボタン側では、disconnectする際、そのメソッドを呼び出すことによって、ボタングループのプロパティのボタンを管理している配列から、そのボタンを削除している。

  • 84

    connectedCallbackが起動されるよりも前に処理を実行したい場合は?

    コンストラクタでやる。

  • 85

    ボタングループの処理で学んだテクニックは?

    this.をバインドした関数やアロー関数をイベントを介して親側に渡すことによって、親のオブジェクトから子コンポーネントを更新を行うことができ、、シームレスなやり取りができるテクニックといえる。 こういったメソッドをやり取りすることで、子からも親を更新することも可能

  • 86

    親と子がある場合、 コンストラクタとconnectedCallbackの実行順は?

    親のコンストラクタ実行→親のconnectedCallback→子のコンストラクタ実行→子のconnectedCallback

  • 87

    HTMLから呼ばれるjsのメソッド js 内部から呼ばれないメソッド メソッド名をどう表現すべきか

    privateなメソッド、変数は_をつける

  • 88

    特定のLightningコンポーネントが関係するカスタムコンポーネントやApexクラスを確認したい場合はなにをみればいいか

    設定からLightningコンポーネントで該当のLWCを確認すると、連動関係がみれる

  • 89

    Salesforceではスロットがない子コンポーネントに対し、親側でマークアップを渡すとどうなるか

    表示されない。 ただ、ネイティブshadow なら表示される

  • 90

    公開プロパティが設定されるたびにロジックを実行するにはどうするか? @apiアノテーションはどう設定するか?

    setterを定義する @apiアノテーションはgetterにだけつける

  • 91

    LWCに対して、HTMLグローバル属性(class titleとか)を使うのは推奨されてるか

    実はされてない 使うなら@apiでデコレートして入力としてサポートするようにしてほしいらしい。 ユーティリティクラス使う場合はdivとかで囲ったほうがいいかも

  • 92

    属性で渡ってくる値を設定する順番は渡された順番と同一であるか?

    いいえ 順不同で渡されてくる

  • 93

    javascriptコードを共有する二つの方法を答えよ

    コンポーネントと同じフォルダにjsファイルを作成し、相対パスでインポート サービスこんぽーねんとを作成し、c/componentName形式でインポート

  • 94

    一つのライブラリモジュールで複数のjsファイルをエクスポートするには?

    各jsファイルでもexportして フォルダ名と同名のjsファイルで まとめてexportする export { classSet} from ‘./classSet’; export * from ‘./banks’; アスタリスクをつかうと全部exportできる

  • 95

    サードパーティのjsライブラリなど、静的リソースにあるCSSやjsファイルを使用するにはどうすればよいか

    静的リソースにアップロードして importする import myLib from "@salesforce/resourceUrl/myLib"; platformResourceLoaderモジュールからメソッドをインポートする import { loadStyle, loadScript } from "lightning/platformResourceLoader"; インポートしてきたメソッドと実行コンテキストと静的リソースからの相対パスを指定して実行! loadScript(this, myLib + "/myLib.js").then(() => { let result = myLib.myFunction(2, 2); });

  • 96

    CSSをライブラリモジュールからインポートする時に気をつけることは

    同名のjsファイルが存在するとそちらが優先してimportされてしまうので注意 c/moduleNameとして読み込んだときに、 jsがなければ、cssを読み込むという順序で処理される

  • 97

    jsを利用したDomの操作は推奨されてないが、サードパーティライブラリなどで使用したい場合にはどうすればいいか?

    Dom操作対象のコンポーネントにたいして lwc:dom="manual"を利用する。 これを指定するとカプセル化を維持するらしい。 <template> <div lwc:dom="manual"></div> </template> これでこの要素に対してappendChildとかができる。

  • 98

    ライブラリを使用する際、組織設定にかかわるところで気をつけることはなにか

    Lightning Lockerを使用している場合は、 ライブラリに対して制限がある Lightning Webセキュリティならないとのこと

  • 99

    javascriptからAPIをコールすることは可能か?

    デフォルトではできないが、 CSP信頼済みサイトに登録し、ポリシーなどの変更が必要。 JavaScriptリソースを外部から読み込むことはできない(静的リソースでやれ)

  • 100

    JavaScriptがサポートしている唯一のAPIはなにか

    lightning Data Serviceのみ LDS以外のSalesforceApiは起動できない。(Apexでやれ)