From 6c8f7c3b8a6c77981f5e38f367a0e07af9231b40 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 8 Mar 2025 10:29:26 +0800 Subject: [PATCH 1/6] =?UTF-8?q?refactor:=20=E6=8F=90=E7=82=BC=20BootstrapB?= =?UTF-8?q?lazorRender=20=E7=BB=84=E4=BB=B6?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/AutoComplete/AutoComplete.razor | 4 +++- .../AutoComplete/AutoComplete.razor.cs | 12 ++---------- .../BootstrapBlazorRender.cs} | 16 +++++++--------- 3 files changed, 12 insertions(+), 20 deletions(-) rename src/BootstrapBlazor/Components/{AutoComplete/AutoCompleteItems.cs => BaseComponents/BootstrapBlazorRender.cs} (82%) diff --git a/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor b/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor index 7286758dfe9..8a4f3d937d0 100644 --- a/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor +++ b/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor @@ -16,7 +16,9 @@ placeholder="@PlaceHolder" disabled="@Disabled" @ref="FocusElement"/> - + + @RenderDropdown + @code { diff --git a/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.cs b/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.cs index a1e7a8b0921..39c5fa7a80e 100644 --- a/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.cs +++ b/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.cs @@ -90,7 +90,7 @@ public partial class AutoComplete private List? _filterItems; [NotNull] - private AutoCompleteItems? _dropdown = default; + private BootstrapBlazorRender? _dropdown = default; /// /// @@ -187,15 +187,7 @@ public override Task TriggerChange(string val) StateHasChanged(); } _render = true; - _dropdown.RenderContent(); + _dropdown.Render(); return Task.CompletedTask; } - - private RenderFragment RenderItems => builder => - { - builder.OpenComponent(0); - builder.AddAttribute(10, "ChildContent", RenderDropdown); - builder.AddComponentReferenceCapture(20, dropdown => _dropdown = (AutoCompleteItems)dropdown); - builder.CloseComponent(); - }; } diff --git a/src/BootstrapBlazor/Components/AutoComplete/AutoCompleteItems.cs b/src/BootstrapBlazor/Components/BaseComponents/BootstrapBlazorRender.cs similarity index 82% rename from src/BootstrapBlazor/Components/AutoComplete/AutoCompleteItems.cs rename to src/BootstrapBlazor/Components/BaseComponents/BootstrapBlazorRender.cs index d2839dc4ce4..cab8127b290 100644 --- a/src/BootstrapBlazor/Components/AutoComplete/AutoCompleteItems.cs +++ b/src/BootstrapBlazor/Components/BaseComponents/BootstrapBlazorRender.cs @@ -8,9 +8,9 @@ namespace BootstrapBlazor.Components; /// -/// AutoCompleteItems component +/// BootstrapBlazorRender component /// -class AutoCompleteItems : IComponent +public class BootstrapBlazorRender : IComponent { /// /// Gets or sets the child content @@ -18,6 +18,8 @@ class AutoCompleteItems : IComponent [Parameter, NotNull] public RenderFragment? ChildContent { get; set; } + private static readonly RenderFragment _emptyRenderFragment = _ => { }; + private RenderHandle _renderHandle; /// @@ -38,23 +40,19 @@ public Task SetParametersAsync(ParameterView parameters) { parameters.SetParameterProperties(this); - RenderContent(); + Render(); return Task.CompletedTask; } /// /// Render method /// - public void RenderContent() + public void Render() { _renderHandle.Render(BuildRenderTree); } - /// - /// - /// - /// private void BuildRenderTree(RenderTreeBuilder builder) { - builder.AddContent(0, ChildContent); + builder.AddContent(0, ChildContent ?? _emptyRenderFragment); } } From ffaa897c50479e9d61aafc40bd8975bb5a41d613 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 8 Mar 2025 10:35:20 +0800 Subject: [PATCH 2/6] =?UTF-8?q?refactor:=20=E9=80=82=E9=85=8D=E7=BD=91?= =?UTF-8?q?=E7=BB=9C=E5=8D=A1=E9=A1=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Components/Search/Search.razor | 13 ++++++++++--- .../Components/Search/Search.razor.cs | 15 ++++++++++++++- 2 files changed, 24 insertions(+), 4 deletions(-) diff --git a/src/BootstrapBlazor/Components/Search/Search.razor b/src/BootstrapBlazor/Components/Search/Search.razor index 5831bb583bf..ba28e4d94b7 100644 --- a/src/BootstrapBlazor/Components/Search/Search.razor +++ b/src/BootstrapBlazor/Components/Search/Search.razor @@ -55,7 +55,14 @@ } - ; +} diff --git a/src/BootstrapBlazor/Components/Search/Search.razor.cs b/src/BootstrapBlazor/Components/Search/Search.razor.cs index 1e466edf07e..b62fe2a31f5 100644 --- a/src/BootstrapBlazor/Components/Search/Search.razor.cs +++ b/src/BootstrapBlazor/Components/Search/Search.razor.cs @@ -171,6 +171,9 @@ public partial class Search private SearchContext _context = default!; + [NotNull] + private BootstrapBlazorRender? _dropdown = default; + /// /// /// @@ -205,6 +208,14 @@ protected override void OnParametersSet() } } + private bool _render = true; + + /// + /// + /// + /// + protected override bool ShouldRender() => _render; + private string _displayText = ""; /// /// 点击搜索按钮时触发此方法 @@ -280,11 +291,13 @@ private async Task OnClickItem(TValue val) [JSInvokable] public override async Task TriggerChange(string val) { + _render = false; _displayText = val; - if (IsTriggerSearchByInput) { await OnSearchClick(); } + _render = true; + _dropdown.Render(); } } From 70080e751b63fec784964e6b7a3db441f18946c1 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 8 Mar 2025 10:45:57 +0800 Subject: [PATCH 3/6] =?UTF-8?q?refactor:=20=E7=A7=BB=E9=99=A4=20BootstrapB?= =?UTF-8?q?lazorRender=20=E7=BB=84=E4=BB=B6=E4=BD=BF=E7=94=A8=20RenderTemp?= =?UTF-8?q?late=20=E4=BB=A3=E6=9B=BF?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../AutoComplete/AutoComplete.razor | 4 +- .../AutoComplete/AutoComplete.razor.cs | 2 +- .../BaseComponents/BootstrapBlazorRender.cs | 58 ------------------- .../BaseComponents/RenderTemplate.razor.cs | 14 ++++- .../Components/Search/Search.razor | 4 +- .../Components/Search/Search.razor.cs | 2 +- 6 files changed, 17 insertions(+), 67 deletions(-) delete mode 100644 src/BootstrapBlazor/Components/BaseComponents/BootstrapBlazorRender.cs diff --git a/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor b/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor index 8a4f3d937d0..fe0b8e712da 100644 --- a/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor +++ b/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor @@ -16,9 +16,9 @@ placeholder="@PlaceHolder" disabled="@Disabled" @ref="FocusElement"/> - + @RenderDropdown - + @code { diff --git a/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.cs b/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.cs index 39c5fa7a80e..e61dc7c9859 100644 --- a/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.cs +++ b/src/BootstrapBlazor/Components/AutoComplete/AutoComplete.razor.cs @@ -90,7 +90,7 @@ public partial class AutoComplete private List? _filterItems; [NotNull] - private BootstrapBlazorRender? _dropdown = default; + private RenderTemplate? _dropdown = default; /// /// diff --git a/src/BootstrapBlazor/Components/BaseComponents/BootstrapBlazorRender.cs b/src/BootstrapBlazor/Components/BaseComponents/BootstrapBlazorRender.cs deleted file mode 100644 index cab8127b290..00000000000 --- a/src/BootstrapBlazor/Components/BaseComponents/BootstrapBlazorRender.cs +++ /dev/null @@ -1,58 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the Apache 2.0 License -// See the LICENSE file in the project root for more information. -// Maintainer: Argo Zhang(argo@live.ca) Website: https://www.blazor.zone - -using Microsoft.AspNetCore.Components.Rendering; - -namespace BootstrapBlazor.Components; - -/// -/// BootstrapBlazorRender component -/// -public class BootstrapBlazorRender : IComponent -{ - /// - /// Gets or sets the child content - /// - [Parameter, NotNull] - public RenderFragment? ChildContent { get; set; } - - private static readonly RenderFragment _emptyRenderFragment = _ => { }; - - private RenderHandle _renderHandle; - - /// - /// - /// - /// - public void Attach(RenderHandle renderHandle) - { - _renderHandle = renderHandle; - } - - /// - /// - /// - /// - /// - public Task SetParametersAsync(ParameterView parameters) - { - parameters.SetParameterProperties(this); - - Render(); - return Task.CompletedTask; - } - /// - /// Render method - /// - public void Render() - { - _renderHandle.Render(BuildRenderTree); - } - - private void BuildRenderTree(RenderTreeBuilder builder) - { - builder.AddContent(0, ChildContent ?? _emptyRenderFragment); - } -} diff --git a/src/BootstrapBlazor/Components/BaseComponents/RenderTemplate.razor.cs b/src/BootstrapBlazor/Components/BaseComponents/RenderTemplate.razor.cs index 5805a63f36d..0bd7342bd4f 100644 --- a/src/BootstrapBlazor/Components/BaseComponents/RenderTemplate.razor.cs +++ b/src/BootstrapBlazor/Components/BaseComponents/RenderTemplate.razor.cs @@ -6,18 +6,18 @@ namespace BootstrapBlazor.Components; /// -/// RenderTemplate 组件 +/// RenderTemplate component /// public partial class RenderTemplate { /// - /// 获得/设置 子组件 + /// Gets or sets the child component /// [Parameter] public RenderFragment? ChildContent { get; set; } /// - /// 获得/设置 首次加载回调委托 + /// Gets or sets the callback delegate for the first load /// [Parameter] public Func? OnRenderAsync { get; set; } @@ -36,4 +36,12 @@ protected override async Task OnAfterRenderAsync(bool firstRender) await OnRenderAsync(firstRender); } } + + /// + /// Render method + /// + public void Render() + { + StateHasChanged(); + } } diff --git a/src/BootstrapBlazor/Components/Search/Search.razor b/src/BootstrapBlazor/Components/Search/Search.razor index ba28e4d94b7..086849624a2 100644 --- a/src/BootstrapBlazor/Components/Search/Search.razor +++ b/src/BootstrapBlazor/Components/Search/Search.razor @@ -55,9 +55,9 @@ } - + @RenderDropdown - + @code { diff --git a/src/BootstrapBlazor/Components/Search/Search.razor.cs b/src/BootstrapBlazor/Components/Search/Search.razor.cs index b62fe2a31f5..42e86c1c539 100644 --- a/src/BootstrapBlazor/Components/Search/Search.razor.cs +++ b/src/BootstrapBlazor/Components/Search/Search.razor.cs @@ -172,7 +172,7 @@ public partial class Search private SearchContext _context = default!; [NotNull] - private BootstrapBlazorRender? _dropdown = default; + private RenderTemplate? _dropdown = default; /// /// From fd75a59b3e5a798563b17d4a0aa0576d39766c6d Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 8 Mar 2025 12:15:58 +0800 Subject: [PATCH 4/6] =?UTF-8?q?refactor:=20=E4=BB=A3=E7=A0=81=E6=A0=BC?= =?UTF-8?q?=E5=BC=8F=E5=8C=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor/Components/Search/Search.razor.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/BootstrapBlazor/Components/Search/Search.razor.cs b/src/BootstrapBlazor/Components/Search/Search.razor.cs index 42e86c1c539..a906766744a 100644 --- a/src/BootstrapBlazor/Components/Search/Search.razor.cs +++ b/src/BootstrapBlazor/Components/Search/Search.razor.cs @@ -229,7 +229,7 @@ private async Task OnSearchClick() await Task.Yield(); var items = await OnSearch(_displayText); - _filterItems = items.ToList(); + _filterItems = [.. items]; ButtonIcon = SearchButtonIcon; if (IsTriggerSearchByInput == false) { From 2f742803604156a7e96b29b639b138280774f400 Mon Sep 17 00:00:00 2001 From: Argo Zhang Date: Sat, 8 Mar 2025 12:34:00 +0800 Subject: [PATCH 5/6] =?UTF-8?q?doc:=20=E5=A2=9E=E5=8A=A0=20Clear=20?= =?UTF-8?q?=E5=A4=84=E7=90=86=E9=80=BB=E8=BE=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/BootstrapBlazor.Server/Components/Pages/Coms.razor | 3 ++- src/BootstrapBlazor.Server/Components/Pages/Coms.razor.cs | 7 +++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/src/BootstrapBlazor.Server/Components/Pages/Coms.razor b/src/BootstrapBlazor.Server/Components/Pages/Coms.razor index 4ef952c87d1..84da863cd6a 100644 --- a/src/BootstrapBlazor.Server/Components/Pages/Coms.razor +++ b/src/BootstrapBlazor.Server/Components/Pages/Coms.razor @@ -4,7 +4,8 @@