Skip to content

Commit 4487117

Browse files
authored
fix(Table): selected row callback causes infinite loop (#4215)
* fix: 增加选中行判断逻辑防止多次触发 * chore: bump version 8.9.1-beta05 * test: 补充单元测试
1 parent f0435a0 commit 4487117

File tree

3 files changed

+19
-4
lines changed

3 files changed

+19
-4
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>8.9.1-beta04</Version>
4+
<Version>8.9.1-beta05</Version>
55
</PropertyGroup>
66

77
<ItemGroup Condition="'$(TargetFramework)' == 'net5.0'">

src/BootstrapBlazor/Components/Table/Table.razor.Edit.cs

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -607,10 +607,14 @@ private void ResetSelectedRows(IEnumerable<TItem> items)
607607
{
608608
if (SelectedRows.Count > 0)
609609
{
610-
SelectedRows = items.Where(i => SelectedRows.Any(row => Equals(i, row))).ToList();
611-
if (SelectedRowsChanged.HasDelegate)
610+
var selectedRows = items.Where(i => SelectedRows.Any(row => Equals(i, row))).ToList();
611+
if (!selectedRows.SequenceEqual(SelectedRows))
612612
{
613-
_ = SelectedRowsChanged.InvokeAsync(SelectedRows);
613+
SelectedRows = selectedRows;
614+
if (SelectedRowsChanged.HasDelegate)
615+
{
616+
_ = SelectedRowsChanged.InvokeAsync(selectedRows);
617+
}
614618
}
615619
}
616620
}

test/UnitTest/Components/TableTest.cs

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7765,11 +7765,22 @@ public void OnSelectedRows_Ok()
77657765
pb.Add(a => a.DynamicContext, context);
77667766
pb.Add(a => a.ModelEqualityComparer, (x, y) => x.GetValue("Id")?.ToString() == y.GetValue("Id")?.ToString());
77677767
pb.Add(a => a.SelectedRows, rows.Cast<DynamicObject>().ToList());
7768+
pb.Add(a => a.SelectedRowsChanged, rows =>
7769+
{
7770+
7771+
});
77687772
});
77697773
});
77707774

77717775
var check = cut.FindComponents<Checkbox<DynamicObject>>().FirstOrDefault(i => i.Instance.State == CheckboxState.Checked);
77727776
Assert.NotNull(check);
7777+
7778+
context = CreateDynamicContext(localizer);
7779+
var table = cut.FindComponent<Table<DynamicObject>>();
7780+
table.SetParametersAndRender(pb =>
7781+
{
7782+
pb.Add(a => a.DynamicContext, context);
7783+
});
77737784
}
77747785

77757786
[Fact]

0 commit comments

Comments
 (0)