追跡変数が見つかりませんか?

これは私のコードです:

import { apiInitializer } from "discourse/lib/api";
import { iconNode } from "discourse-common/lib/icon-library";
import { tracked } from "@glimmer/tracking";

export default apiInitializer((api) => {
  @tracked iconName = settings.category_lock_icon || 'lock'; // 設定が未定義の場合、「lock」にフォールバック
  @tracked lockIcon = iconNode(this.iconName);

困ったことに、ブラウザのコンソールには ReferenceError: iconName is not defined と表示されます。ブラウザの開発者ツールでファイルを見ると、次のようになっています:

iconName = settings.category_lock_icon || 'lock'; // Fallback to 'lock' if setting is not defined
lockIcon = (0, _iconLibrary.iconNode)((void 0).iconName);

これは、私が作成した別のトラッキング変数を使用するコンポーネント(こちらは動作します)と比較すると、次のようになります:

#buttonIcon = (() => (dt7948.i(this, "buttonIcon"), void 0))();

、元のコードは次のとおりです:

@tracked buttonIcon = localStorage.getItem('buttonIcon') != null ? localStorage.getItem('buttonIcon') : "bug";

何か間違っていますか?

これらを追跡する必要はありません。それらは定数なので不要です。動的であり、ゲッターを発火させたいものだけを追跡する必要があります。代わりにDIconを使用してください。

「いいね!」 1

わかりました。ありがとうございます。試してみます。

「いいね!」 2

トラッキングを行うたびにリソースが消費されるため、それを最小限に抑えてください。大したことではありませんが、ページ訪問中に変更がないものについてはトラッキングしないのが良い習慣です。設定変更の際には、1回のページ更新が発生すると考えていただいて問題ありません。

「いいね!」 3

アドバイスありがとうございます!心に留めておきます。

「いいね!」 1

@merefield さん、こんにちは。この関数でどうすればよいか分かりません。

function ifProtected() {
  if(category.read_restricted) {
    return this.lockIcon;
  }
}

これをどう返せばよいか、何かアドバイスはありますか?これは.gjsファイルなので、次のように返すことは可能ですか?

return <template>{{icon this.iconName}}</template>

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.