ASP0006: Không sử dụng sequence number (số thứ tự) không phải literal
| - | Giá trị |
|---|---|
| Rule ID (Mã quy tắc) | ASP0006 |
| Category (Danh mục) | Usage (Sử dụng) |
| Fix is breaking or non-breaking (Sửa lỗi có phá vỡ tương thích không) | Non-breaking (Không phá vỡ) |
Nguyên nhân
Một lời gọi method trên RenderTreeBuilder (trình tạo cây render) chứa sequence number (số thứ tự) không phải là một giá trị literal (giá trị hằng) làm tham số.
Mô tả quy tắc
Thuật toán UI diffing (so sánh giao diện) của Blazor dựa vào sequence number để xác định phần tử nào đã thay đổi. Việc tính toán sequence number một cách động hoặc dùng bộ đếm có thể dẫn đến hiệu suất diffing (so sánh) kém. Thay vào đó, hãy sử dụng sequence number là giá trị literal tương ứng với số dòng source code (mã nguồn) của phần tử. Ví dụ, đoạn code sau tạo ra lỗi:
using Microsoft.AspNetCore.Components.Rendering; var builder = new RenderTreeBuilder(); var seqNum = 1; builder.OpenElement(seqNum, "div"); builder.CloseElement();
Cách khắc phục vi phạm
Để khắc phục vi phạm quy tắc này, hãy đảm bảo các lời gọi method trên class RenderTreeBuilder nhận sequence number làm tham số đều sử dụng giá trị literal:
using Microsoft.AspNetCore.Components.Rendering; var builder = new RenderTreeBuilder(); builder.OpenElement(0, "div"); builder.CloseElement();
Khi nào có thể bỏ qua cảnh báo
Không nên bỏ qua cảnh báo từ quy tắc này. Sử dụng sequence number không phải literal có thể dẫn đến giảm hiệu suất (performance degradation).