STAGE 03 — 3-1 / 生成物を読み解く

Webパーツ本体を読む

考えてみよう

Webパーツ本体のファイルを開くと、render()getPropertyPaneConfiguration() といったメソッドが並んでいます。この2つ、それぞれ何をする係だと思いますか?

ざっくり言うと、render()画面を描く係getPropertyPaneConfiguration()設定パネルを組み立てる係です。この記事で、Webパーツの骨格を読み解いておくと、STAGE 04で自分のコードを足す場所が一目で分かるようになります。

Webパーツ本体(.ts)の骨格

src/webparts/listViewer/ListViewerWebPart.ts を開くと、だいたい次のような構造になっています(要点だけ抜粋・簡略化)。

export interface IListViewerWebPartProps {
  description: string;   // ← 設定パネルで編集できる値
}

export default class ListViewerWebPart
  extends BaseClientSideWebPart<IListViewerWebPartProps> {

  // ① 画面を描く係
  public render(): void {
    const element = React.createElement(ListViewer, {
      description: this.properties.description
    });
    ReactDom.render(element, this.domElement);
  }

  // ② 設定パネルを組み立てる係
  protected getPropertyPaneConfiguration(): IPropertyPaneConfiguration {
    return {
      pages: [{
        groups: [{
          groupFields: [
            PropertyPaneTextField('description', { label: '説明' })
          ]
        }]
      }]
    };
  }
}

読みどころは3つです。

設定パネル(プロパティペイン)の仕組み

Webパーツを編集モードで開くと、右側にスッと出てくる設定パネル——あれがプロパティペインです。ここで入力した値は this.properties に入り、render() を通じてReact部品へ渡されます。

つまり流れはこうです。

設定パネルで入力 → this.properties に保存 → render() が React に渡す → 画面が変わる

STAGE 04の最後では、この仕組みを使って「表示するリストの名前を、設定パネルから変えられる」ようにします。今は「設定 → プロパティ → 描画」という一本の流れがあることだけ掴めば十分です。

React部品の側

render() から呼ばれる ListViewer は、src/webparts/listViewer/components/ にあります。React部品は「受け取った値(props)をもとに、見た目を返す」のが仕事です。

export default class ListViewer extends React.Component<IListViewerProps> {
  public render(): React.ReactElement<IListViewerProps> {
    return <div>{this.props.description}</div>;
  }
}

IListViewerProps が「React部品が受け取る値の型」です。本体(.ts)から渡された description が、ここで画面に表示されます。「本体=データを用意する人/React部品=見た目を作る人」 と役割を分けて覚えると、迷いません。

manifest.json = 部品の身分証

同じフォルダにある ListViewerWebPart.manifest.json は、この部品の身分証です。世界で唯一のID、部品の種類、そして「初期設定値」が書かれています。ページに配置したとき最初に表示される内容は、ここの preconfiguredEntries で決まります。普段は深く触りませんが、「部品を識別する情報がここにある」と知っておきましょう。

ゆみちゃん
ゆみ

ここまでで登場人物が出そろったね。①本体(.ts)=データ担当、②React部品(.tsx)=見た目担当、③プロパティペイン=設定担当、④manifest=身分証。次のSTAGEからは、この①と②に手を入れて「リストの中身を表示する」を作っていくよ。

この記事のまとめ

骨格が読めるようになりました。次のSTAGE 04からは、いよいよ手を動かして「リストの中身を表示するWebパーツ」を作っていきます。

用語メモ
render()
Webパーツが画面を描くメソッド。React部品を作ってページ上に配置する
プロパティペイン
編集時に右から出る設定パネル。getPropertyPaneConfigurationで中身を定義
props
React部品が親から受け取る値。this.propsで参照する
manifest.json
部品の身分証。ID・種類・初期設定(preconfiguredEntries)を持つ