インストール

モジュールをインストールします

  1. npm install @wordpress/preferences --save

このパッケージは、あなたのコードがES2015+環境で実行されることを前提としています。そのような言語機能やAPIのサポートが限られているか、まったくない環境を使用している場合は、コードに@wordpress/babel-preset-defaultで提供されるポリフィルを含めるべきです

主要な概念

スコープ

多くのAPI呼び出しには、名前空間のように機能する「スコープ」パラメータが必要です。同じキーを持つ複数のパラメータがアプリケーションの異なる部分に適用される場合、スコープを使用することが最も効果的です。

キー

各設定は、文字列であるべきキーに対して設定されます。

値は任意の型であることができますが、サポートされる型は永続層の設定によって制限される場合があります。たとえば、設定がJSON形式でブラウザのlocalStorageに保存される場合、JSONシリアライズ可能な型のみを使用する必要があります。

デフォルト

デフォルトは、設定がundefinedであるときに返される値です。これらは永続化されず、メモリ内にのみ保持されます。アプリケーションの初期化中に保持されるべきです。

データストア

初期化時にアクションをディスパッチすることで、機能のデフォルト設定を設定します:

  1. import { dispatch } from '@wordpress/data';
  2. import { store as preferencesStore } from '@wordpress/preferences';
  3. function initialize() {
  4. // ...
  5. dispatch( preferencesStore ).setDefaults(
  6. 'namespace/editor-or-plugin-name',
  7. {
  8. myBooleanFeature: true,
  9. }
  10. );
  11. // ...
  12. }
  1. ``````bash
  2. wp.data
  3. .select( 'core/preferences' )
  4. .get( 'namespace/editor-or-plugin-name', 'myPreferenceName' ); // 1
  5. wp.data
  6. .dispatch( 'core/preferences' )
  7. .set( 'namespace/editor-or-plugin-name', 'myPreferenceName', 2 );
  8. wp.data
  9. .select( 'core/preferences' )
  10. .get( 'namespace/editor-or-plugin-name', 'myPreferenceName' ); // 2
  11. `
  1. ``````bash
  2. wp.data
  3. .select( 'core/preferences' )
  4. .get( 'namespace/editor-or-plugin-name', 'myPreferenceName' ); // true
  5. wp.data
  6. .dispatch( 'core/preferences' )
  7. .toggle( 'namespace/editor-or-plugin-name', 'myPreferenceName' );
  8. wp.data
  9. .select( 'core/preferences' )
  10. .get( 'namespace/editor-or-plugin-name', 'myPreferenceName' ); // false
  11. `

永続層の設定

デフォルトでは、このパッケージは値をメモリ内にのみ保存します。しかし、オプションの永続層を介してブラウザストレージやデータベースに設定を永続化するように構成できます。

  1. ``````bash
  2. wp.data.dispatch( 'core/preferences' ).setPersistenceLayer( {
  3. // `get` is asynchronous to support persisting preferences using a REST API.
  4. // it will immediately be called by `setPersistenceLayer` and the returned
  5. // value used as the initial state of the preferences.
  6. async get() {
  7. return JSON.parse( window.localStorage.getItem( 'MY_PREFERENCES' ) );
  8. },
  9. // `set` is synchronous. It's ok to use asynchronous code, but the
  10. // preferences store won't wait for a promise to resolve, the function is
  11. // 'fire and forget'.
  12. set( preferences ) {
  13. window.localStorage.setItem(
  14. 'MY_PREFERENCES',
  15. JSON.stringify( preferences )
  16. );
  17. },
  18. } );
  19. `

データを非同期APIに永続化するアプリケーションでは、設定の読み込みがアプリケーションの起動を遅くする可能性があります。

推奨事項は、永続層のデータを事前に読み込み、特にデータを永続化するために非同期APIを使用している場合はローカルキャッシュに保持することです。

注意: 現在、getsetPersistenceLayerがトリガーされたときにのみ呼び出されます。これは将来的に変更される可能性があるため、以下の例に示すようにローカルキャッシュを使用してgetを最適化することが賢明です。

  1. // Preloaded data from the server.
  2. let cache = preloadedData;
  3. wp.data.dispatch( 'core/preferences' ).setPersistenceLayer( {
  4. async get() {
  5. if ( cache ) {
  6. return cache;
  7. }
  8. // Call to a made-up async API.
  9. return await api.preferences.get();
  10. },
  11. set( preferences ) {
  12. cache = preferences;
  13. api.preferences.set( { data: preferences } );
  14. },
  15. } );

コンポーネント

  1. ``````bash
  2. function MyEditorMenu() {
  3. return (
  4. <DropdownMenu>
  5. { () => (
  6. <MenuGroup label={ __( 'Features' ) }>
  7. <PreferenceToggleMenuItem
  8. scope="namespace/editor-or-plugin-name"
  9. name="myPreferenceName"
  10. label={ __( 'My feature' ) }
  11. info={ __( 'A really awesome feature' ) }
  12. messageActivated={ __( 'My feature activated' ) }
  13. messageDeactivated={ __( 'My feature deactivated' ) }
  14. />
  15. </MenuGroup>
  16. ) }
  17. </DropdownMenu>
  18. );
  19. }
  20. `

APIリファレンス

アクション

wp.data.dispatch( 'core/preferences' )から返されるオブジェクトには、次のアクション作成者のセットが利用可能です:

set

設定を値に設定する必要があることを示すアクションオブジェクトを返します

パラメータ

  • scope string: 設定スコープ(例: core/edit-post)。
  • name string: 設定名。
  • value *: 設定する値。

返されるもの

  • Object: アクションオブジェクト。

setDefaults

設定のデフォルトを設定する必要があることを示すアクションオブジェクトを返します。

パラメータ

  • scope string: 設定スコープ(例: core/edit-post)。
  • defaults Object<string, *>: 設定名と値のキー/バリューマップ。

返されるもの

  • Object: アクションオブジェクト。

setPersistenceLayer

永続層を設定します。

永続層が設定されると、設定ストアは:

  • getを即座に呼び出し、返された値にストアの状態を更新します。
  • 設定が値を変更するたびに、すべての設定でsetを呼び出します。

setPersistenceLayerは、アプリケーションのライフサイクルの開始時に、他のアクションが設定ストアにディスパッチされる前にディスパッチされるべきです。

パラメータ

  • persistenceLayer WPPreferencesPersistenceLayer: 永続層。

返されるもの

  • Object: アクションオブジェクト。

toggle

設定を切り替える必要があることを示すアクションオブジェクトを返します。

パラメータ

  • scope string: 設定スコープ(例: core/edit-post)。
  • name string: 設定名。

セレクタ

wp.data.select( 'core/preferences' )から返されるオブジェクトには、次のセレクタが利用可能です:

get

特定のスコープに対して設定がアクティブかどうかを示すブール値を返します。

パラメータ

  • state Object: ストアの状態。
  • scope string: 機能のスコープ(例: core/edit-post)。
  • name string: 機能の名前。

返されるもの

  • *: 機能は有効ですか?

このパッケージへの貢献

これはGutenbergプロジェクトの一部である個別のパッケージです。このプロジェクトはモノレポとして整理されています。特定の目的を持つ複数の自己完結型ソフトウェアパッケージで構成されています。このモノレポ内のパッケージはnpmに公開され、WordPressや他のソフトウェアプロジェクトで使用されています。

このパッケージやGutenberg全体への貢献について詳しく知りたい場合は、プロジェクトの主要な貢献者ガイドをお読みください。