【SPFx】PnPjsを利用

開発環境

VSCode
Node: v18.20.8
spfx: 1.20.2
@pnp/sp: 4.12.0

PnPjsをインストールと設定

PnPjsをインストール

Webパーツのソリューションを開き次のコマンドを実行し必要なモジュールをインストールする

npm install @pnp/logging @pnp/sp --save

PnPjsの設定

PnPjsのプロジェクト構成ファイルを作成

  1. 次のフォルダの中にpnpjsConfig.tsという名前のファイルを作成
    .\src\webparts\[Webパーツ]

  2. PnPjsの初期処理を記述

    import { WebPartContext } from "@microsoft/sp-webpart-base";
    
    import { spfi, SPFI, SPFx } from "@pnp/sp";
    import { LogLevel, PnPLogging } from "@pnp/logging";
    // import "@pnp/sp/webs";
    // import "@pnp/sp/lists";
    // import "@pnp/sp/items";
    // import "@pnp/sp/batching";
    
    let _sp: SPFI | null = null;
    
    export const getSP = (context?: WebPartContext): SPFI => {
        if (_sp === null && context != null) {
            _sp = spfi().using(SPFx(context)).using(PnPLogging(LogLevel.Warning));
        }
        return _sp!;
    };

PnPjsのセットアップ

@pnp/spライブラリがRESTリクエストを作成するためにURLを設定する必要がある。
その設定をSPFxのフレームワークによって提供されるコンテキストオブジェクトを設定する。

  1. .\src\webparts\[Webパーツ][Webパーツ]WebPart.tsを開く
  2. インポートステートメントを追加
    import { getSP } from "./pnpjsConfig";
  3. onInit()メソッドに処理を追加

    protected onInit(): Promise<void> {
        getSP(this.context);    // ※ 追加
    
        return this._getEnvironmentMessage().then(message => {
            this._environmentMessage = message;
        });
    }

実際にコンポーネントで利用する

  1. インポートステートメントを追加

  2. メンバ変数とコンストラクタでインスタンスを取得

    private _sp: SPFI;      // ※追加
    
    constructor(props: IPnPjsExampleProps) {
        super(props);
        // set initial state
        this.state = {
            items: [],
            errors: []
        };
        this._sp = getSP();     // ※追加
    }

エラーと対処方法

モジュール読み込みエラー

「モジュール '"@pnp/sp"' にエクスポートされたメンバー 'sp' がありません。ts(2305)」
@pnp/sp のバージョン 3.x 以降では sp を直接使用するのではなく、spfi を利用してインスタンスを生成する方法が推奨されている。

learn.microsoft.com
Luise Freese

Commentsこの記事のコメント

メールアドレスが公開されることはありません。お気軽にコメントどうぞ。

人気記事