Skip to content

Commit dbb2914

Browse files
authored
fix(SelectTree): optimize select item change event (#6654)
* fix(SelectTree): 修复页面刷新时触发 OnSelectedItemChanged 问题 * chore: bump version 9.9.3-beta02
1 parent 8517b7b commit dbb2914

File tree

3 files changed

+19
-34
lines changed

3 files changed

+19
-34
lines changed

src/BootstrapBlazor/BootstrapBlazor.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
<Project Sdk="Microsoft.NET.Sdk.Razor">
22

33
<PropertyGroup>
4-
<Version>9.9.3-beta01</Version>
4+
<Version>9.9.3-beta02</Version>
55
</PropertyGroup>
66

77
<ItemGroup>

src/BootstrapBlazor/Components/Select/SelectTree.razor

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
}
1616
else
1717
{
18-
<input type="text" id="@InputId" readonly disabled="@Disabled" placeholder="@PlaceHolder" class="@InputClassName" value="@SelectedItem?.Text" />
18+
<input type="text" id="@InputId" readonly disabled="@Disabled" placeholder="@PlaceHolder" class="@InputClassName" value="@_selectedItem?.Text" />
1919
}
2020
<span class="@AppendClassName"><i class="@DropdownIcon"></i></span>
2121
</div>

src/BootstrapBlazor/Components/Select/SelectTree.razor.cs

Lines changed: 17 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,10 @@ public partial class SelectTree<TValue> : IModelEqualityComparer<TValue>
150150
[NotNull]
151151
private IStringLocalizer<SelectTree<TValue>>? Localizer { get; set; }
152152

153+
[Inject]
154+
[NotNull]
155+
private IIconTheme? IconTheme { get; set; }
156+
153157
/// <summary>
154158
/// 获得 input 组件 Id 方法
155159
/// </summary>
@@ -161,19 +165,9 @@ public partial class SelectTree<TValue> : IModelEqualityComparer<TValue>
161165
/// </summary>
162166
private string? InputId => $"{Id}_input";
163167

164-
/// <summary>
165-
/// 获得/设置 上次选项
166-
/// </summary>
167-
private TreeViewItem<TValue>? SelectedItem { get; set; }
168-
169-
private List<TreeViewItem<TValue>>? ItemCache { get; set; }
170-
171-
[NotNull]
172-
private List<TreeViewItem<TValue>>? ExpandedItemsCache { get; set; }
173-
174-
[Inject]
175-
[NotNull]
176-
private IIconTheme? IconTheme { get; set; }
168+
private TreeViewItem<TValue>? _selectedItem;
169+
private List<TreeViewItem<TValue>>? _itemCache;
170+
private List<TreeViewItem<TValue>>? _expandedItemsCache;
177171

178172
private string? SelectTreeCustomClassString => CssBuilder.Default(CustomClassString)
179173
.AddClass("select-tree", IsPopover)
@@ -190,19 +184,6 @@ protected override void OnInitialized()
190184
AddRequiredValidator();
191185
}
192186

193-
/// <summary>
194-
/// <inheritdoc/>
195-
/// </summary>
196-
protected override async Task OnInitializedAsync()
197-
{
198-
await base.OnInitializedAsync();
199-
200-
if (Value != null)
201-
{
202-
await TriggerItemChanged(s => Equals(s.Value, Value));
203-
}
204-
}
205-
206187
/// <summary>
207188
/// <inheritdoc/>
208189
/// </summary>
@@ -263,18 +244,22 @@ private async Task TriggerItemChanged(Func<TreeViewItem<TValue>, bool> predicate
263244
if (currentItem != null)
264245
{
265246
currentItem.IsActive = true;
266-
await ItemChanged(currentItem);
247+
248+
if (_selectedItem == null || !Equals(_selectedItem.Value, Value))
249+
{
250+
await ItemChanged(currentItem);
251+
}
267252
}
268253
}
269254

270255
private List<TreeViewItem<TValue>> GetExpandedItems()
271256
{
272-
if (ItemCache != Items)
257+
if (_itemCache != Items)
273258
{
274-
ItemCache = Items;
275-
ExpandedItemsCache = TreeViewExtensions.GetAllItems(ItemCache).ToList();
259+
_itemCache = Items;
260+
_expandedItemsCache = [.. TreeViewExtensions.GetAllItems(_itemCache)];
276261
}
277-
return ExpandedItemsCache;
262+
return _expandedItemsCache!;
278263
}
279264

280265
/// <summary>
@@ -295,7 +280,7 @@ private async Task OnItemClick(TreeViewItem<TValue> item)
295280
/// <returns></returns>
296281
private async Task ItemChanged(TreeViewItem<TValue> item)
297282
{
298-
SelectedItem = item;
283+
_selectedItem = item;
299284
CurrentValue = item.Value;
300285

301286
// 触发 SelectedItemChanged 事件

0 commit comments

Comments
 (0)