この文章は Salesforce 機械翻訳システムを使用して翻訳されました。詳細はこちらをご参照ください。
英語に切り替える

<aura:if> — 表示されない内容のクリーンアップ

この警告は、<aura:if> タグの isTrue 属性を true から false に変更した場合に発生します。<aura:if> の表示されない内容は破棄する必要があり、これによりフレームワークで表示にかかる時間が短縮されます。

次のコンポーネントは、アンチパターンを示しています。

1<!--c:ifCleanUnrendered-->
2<aura:component>
3    <aura:attribute name="isVisible" type="boolean" default="true"/>
4    <aura:handler name="init" value="{!this}" action="{!c.init}"/>
5
6    <aura:if isTrue="{!v.isVisible}">
7        <p>I am visible</p>
8    </aura:if>
9</aura:component>

コンポーネントのクライアント側コントローラを次に示します。

1/* c:ifCleanUnrenderedController.js */
2({
3    init: function(cmp) {
4        /* Some logic */
5        cmp.set("v.isVisible", false); // Performance warning trigger
6    }
7})

コンポーネントが作成されるときに、<aura:if> タグの isTrue 属性が評価されます。isVisible 属性の値はデフォルトで true なので、フレームワークによって <aura:if> タグのボディが作成されます。コンポーネントが作成されてから表示されるまでの間に、init イベントがトリガされます。

クライアント側コントローラの init() 関数で isVisible の値が trueから false に切り替えられます。<aura:if> タグの isTrue 属性が false になったので、フレームワークは <aura:if> タグのボディを破棄する必要があります。この警告は、デバッグモードを有効にした場合にのみブラウザコンソールに表示されます。

1WARNING: [Performance degradation] markup://aura:if ["5:0"] in c:ifCleanUnrendered ["3:0"]
2needed to clear unrendered body.

警告のスタック追跡を表示するには、警告の横の展開ボタンをクリックします。

ブラウザコンソール、スタック追跡

ブラウザコンソールの [ソース] ペインに問題を起こしているコードの行を表示するには、スタック追跡で ifCleanUnrendered エントリのリンクをクリックします。

警告を修正する方法

isTrue 式のロジックを逆にします。isTrue 属性をデフォルトで true に設定せずに、false に設定します。必要に応じて、init() メソッドで isTrue 式を true に設定します。

次に、修正したコンポーネントを示します。

1<!--c:ifCleanUnrenderedFixed-->
2<aura:component>
3    <!-- FIX: Change default to false.
4         Update isTrue expression in controller instead. -->
5    <aura:attribute name="isVisible" type="boolean" default="false"/>
6    <aura:handler name="init" value="{!this}" action="{!c.init}"/>
7
8    <aura:if isTrue="{!v.isVisible}">
9        <p>I am visible</p>
10    </aura:if>
11</aura:component>

次に、修正したコントローラを示します。

1/* c:ifCleanUnrenderedFixedController.js */
2({
3    init: function(cmp) {
4        // Some logic
5        // FIX: set isVisible to true if logic criteria met
6        cmp.set("v.isVisible", true);
7    }
8})