التعامل مع مكونات التحميل في Blazor

· 2 دقيقة قراءة

Blazor رائع، رائع حقًا، خاصة عندما نقوم بأشياء غير متزامنة مثل صناديق التحميل ويبدو الأمر جيدًا.

لقد كنت أحاول القيام بطرق متعددة حول كيفية التعامل مع تحميل الصفحات والحالات والمكونات وما إلى ذلك. وأعتقد أنني وجدت أخيرًا الطريقة المثالية للقيام بذلك بالطريقة التي أريدها.

#فكرة

بدلاً من إعادة كتابة منطق التحميل على كل صفحة أو مكون، نقوم ببناء المكون الأصلي باستخدام ChildComponent، وهذا سيمنحنا التغيير لإعادة الاستخدام عدة مرات فقط.

رمز تحميل المكون

الكود بسيط جدًا، ليس هناك الكثير مما يجب فعله، if أساسي مع خاصية التحميل، ووظيفة تبديل بالداخل، وقد انتهى الأمر!

@if (_loaded)
{
    <div class="text-center">
        <div class="spinner-border" role="status">
            <span class="sr-only"></span>
        </div>
    </div>
}
else
{
    @ChildContent
}

@code {
    private bool _loaded = true;

    [Parameter]
    public RenderFragment? ChildContent { get; set; }

    public void ToggleLoad(bool state)
    {
        _loaded = state;
    }
}

الاستخدام

الاستخدام بسيط جدًا، ومن أجل الاختبار، سنستخدم صفحة جديدة ونضع المحتوى الخاص بنا داخل مكون LoadingComponent الذي أنشأناه للتو.

@page "/loading"
@using LoadingBoxes.Components

<LoadingBoxes.Components.LoadingComponent @ref=loadingComponent>
    This is some content
</LoadingBoxes.Components.LoadingComponent>

@code {
    private LoadingComponent loadingComponent;


    protected override async Task OnInitializedAsync()
    {
        // We are going to simulate some load
        await Task.Delay(5000);

        loadingComponent.ToggleLoad(false);
    }

}

هذه هي الطريقة التي تبدو

المزيد من الأمثلة المضحكة

لنفترض أن لدينا مكونات متعددة لكل منها أوقات تحميل خاصة به، يمكننا بناء شيء يبدو جيدًا بناءً على ذلك!

لنقم بإنشاء مكون تحميل مزيف يمكننا إعادة استخدامه يسمى FakeLoadingComponent.

@using LoadingBoxes.Components

<LoadingBoxes.Components.LoadingComponent @ref=loadingComponent>
    It took @ellapsedTime seconds!
</LoadingBoxes.Components.LoadingComponent>

@code {
    private LoadingComponent loadingComponent = new();
    private int ellapsedTime = 0;
    private Random rnd = new(); 

    protected override async Task OnInitializedAsync()
    {
        var random = rnd.Next(0, 5000);

        // We are going to simulate some load
        await Task.Delay(random);

        ellapsedTime = random/ 1000;

        loadingComponent.ToggleLoad(false);
        StateHasChanged();
    }
}

ثم نقوم فقط بتحديث صفحة Loading بمكونات FakeLoadingComponent المتعددة والتحقق من النتيجة !!

@page "/loading"
@using LoadingBoxes.Components

<FakeLoadingComponent/>
<FakeLoadingComponent/>
<FakeLoadingComponent/>
<FakeLoadingComponent/>
<FakeLoadingComponent/>

الآن يبدو هذا أفضل بكثير

وهذا كل شيء!

إذا كانت لديك أي مشاكل أو أسئلة، فلا تتردد في الاتصال بي على أي وسيلة تواصل اجتماعية على @emimontesdeoca (في تويتر هو في الواقع @emimontesdeocaa مع اثنين من aa في النهاية). يمكنك أيضًا العثور على معظم وسائل التواصل الاجتماعي الخاصة بي على رأس المدونة.

آمل أن تكونوا قد أحببت هذا المنصب!