Skip to content

Commit 8789e58

Browse files
authored
feat(TreeView): add cache for tree rows (#4833)
* doc: 代码格式化 * refactor: 精简代码提高 Items 性能 * refactor: Reset 清缓存
1 parent 3ede666 commit 8789e58

File tree

2 files changed

+24
-21
lines changed

2 files changed

+24
-21
lines changed

src/BootstrapBlazor/Components/TreeView/TreeView.razor.cs

Lines changed: 22 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -351,6 +351,7 @@ protected override async Task OnParametersSetAsync()
351351
{
352352
if (IsReset)
353353
{
354+
_rows = null;
354355
TreeNodeStateCache.Reset();
355356
}
356357
else
@@ -822,35 +823,37 @@ private void OnTouchEnd()
822823
TouchStart = false;
823824
}
824825

825-
private List<TreeViewItem<TItem>> Rows => GetTreeRows(Items);
826-
827826
private List<TreeViewItem<TItem>>? _rows = null;
828827

829-
#if NET9_0_OR_GREATER
830-
private readonly Lock _object = new();
831-
#else
832-
private readonly object _object = new();
833-
#endif
828+
private List<TreeViewItem<TItem>> Rows
829+
{
830+
get
831+
{
832+
_rows ??= GetTreeRows(Items);
833+
return _rows;
834+
}
835+
}
834836

835-
private List<TreeViewItem<TItem>> GetTreeRows(List<TreeViewItem<TItem>> items)
837+
/// <summary>
838+
/// 将带层次结构的数据转换为扁平化数据
839+
/// </summary>
840+
/// <param name="items"></param>
841+
/// <returns></returns>
842+
private static List<TreeViewItem<TItem>> GetTreeRows(List<TreeViewItem<TItem>> items)
836843
{
837-
lock (_object)
844+
var rows = new List<TreeViewItem<TItem>>();
845+
if (items != null)
838846
{
839-
var rows = new List<TreeViewItem<TItem>>();
840-
if (items != null)
847+
foreach (var item in items)
841848
{
842-
foreach (var item in items)
849+
rows.Add(item);
850+
if (item.IsExpand)
843851
{
844-
rows.Add(item);
845-
if (item.IsExpand)
846-
{
847-
rows.AddRange(GetTreeRows(item.Items));
848-
}
852+
rows.AddRange(GetTreeRows(item.Items));
849853
}
850854
}
851-
_rows ??= rows;
852-
return rows;
853855
}
856+
return rows;
854857
}
855858

856859
private static string? GetTreeRowStyle(TreeViewItem<TItem> item)

src/BootstrapBlazor/Extensions/JSModuleExtensions.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,8 @@ public static async Task<JSModule> LoadModule(this IJSRuntime jsRuntime, string
3131
fileName = $"{fileName}?v={version}";
3232
}
3333

34-
var jSObjectReference = await jsRuntime.InvokeAsync<IJSObjectReference>(identifier: "import", fileName);
35-
return new JSModule(jSObjectReference);
34+
var jSObjectReference = await jsRuntime.InvokeAsync<IJSObjectReference>(identifier: "import", fileName);
35+
return new JSModule(jSObjectReference);
3636
}
3737

3838
/// <summary>

0 commit comments

Comments
 (0)