* Make it irrelevant whether components call base.BuildRenderTree or not. Fixes #8192 * Remove base.BuildRenderTree calls from manually-implemented render logic * Update ref assembly code
This commit is contained in:
parent
cc1b2941f9
commit
63a4b5c27a
|
|
@ -577,7 +577,6 @@ namespace Test
|
||||||
|
|
||||||
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
||||||
{
|
{
|
||||||
base.BuildRenderTree(builder);
|
|
||||||
for (var i = 0; i < Count; i++)
|
for (var i = 0; i < Count; i++)
|
||||||
{
|
{
|
||||||
builder.AddContent(i, Template, Value);
|
builder.AddContent(i, Template, Value);
|
||||||
|
|
|
||||||
|
|
@ -65,7 +65,6 @@ namespace Microsoft.AspNetCore.Components
|
||||||
}
|
}
|
||||||
public abstract partial class ComponentBase : Microsoft.AspNetCore.Components.IComponent, Microsoft.AspNetCore.Components.IHandleAfterRender, Microsoft.AspNetCore.Components.IHandleEvent
|
public abstract partial class ComponentBase : Microsoft.AspNetCore.Components.IComponent, Microsoft.AspNetCore.Components.IHandleAfterRender, Microsoft.AspNetCore.Components.IHandleEvent
|
||||||
{
|
{
|
||||||
public const string BuildRenderTreeMethodName = "BuildRenderTree";
|
|
||||||
public ComponentBase() { }
|
public ComponentBase() { }
|
||||||
protected virtual void BuildRenderTree(Microsoft.AspNetCore.Components.RenderTree.RenderTreeBuilder builder) { }
|
protected virtual void BuildRenderTree(Microsoft.AspNetCore.Components.RenderTree.RenderTreeBuilder builder) { }
|
||||||
protected System.Threading.Tasks.Task Invoke(System.Action workItem) { throw null; }
|
protected System.Threading.Tasks.Task Invoke(System.Action workItem) { throw null; }
|
||||||
|
|
|
||||||
|
|
@ -25,11 +25,6 @@ namespace Microsoft.AspNetCore.Components
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public abstract class ComponentBase : IComponent, IHandleEvent, IHandleAfterRender
|
public abstract class ComponentBase : IComponent, IHandleEvent, IHandleAfterRender
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// Specifies the name of the <see cref="RenderTree"/>-building method.
|
|
||||||
/// </summary>
|
|
||||||
public const string BuildRenderTreeMethodName = nameof(BuildRenderTree);
|
|
||||||
|
|
||||||
private readonly RenderFragment _renderFragment;
|
private readonly RenderFragment _renderFragment;
|
||||||
private RenderHandle _renderHandle;
|
private RenderHandle _renderHandle;
|
||||||
private bool _initialized;
|
private bool _initialized;
|
||||||
|
|
@ -41,7 +36,12 @@ namespace Microsoft.AspNetCore.Components
|
||||||
/// </summary>
|
/// </summary>
|
||||||
public ComponentBase()
|
public ComponentBase()
|
||||||
{
|
{
|
||||||
_renderFragment = BuildRenderTree;
|
_renderFragment = builder =>
|
||||||
|
{
|
||||||
|
_hasPendingQueuedRender = false;
|
||||||
|
_hasNeverRendered = false;
|
||||||
|
BuildRenderTree(builder);
|
||||||
|
};
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
@ -52,8 +52,9 @@ namespace Microsoft.AspNetCore.Components
|
||||||
{
|
{
|
||||||
// Developers can either override this method in derived classes, or can use Razor
|
// Developers can either override this method in derived classes, or can use Razor
|
||||||
// syntax to define a derived class and have the compiler generate the method.
|
// syntax to define a derived class and have the compiler generate the method.
|
||||||
_hasPendingQueuedRender = false;
|
|
||||||
_hasNeverRendered = false;
|
// Other code within this class should *not* invoke BuildRenderTree directly,
|
||||||
|
// but instead should invoke the _renderFragment field.
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
||||||
|
|
@ -93,8 +93,6 @@ namespace Microsoft.AspNetCore.Components.Forms
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
||||||
{
|
{
|
||||||
base.BuildRenderTree(builder);
|
|
||||||
|
|
||||||
// If _fixedEditContext changes, tear down and recreate all descendants.
|
// If _fixedEditContext changes, tear down and recreate all descendants.
|
||||||
// This is so we can safely use the IsFixed optimization on CascadingValue,
|
// This is so we can safely use the IsFixed optimization on CascadingValue,
|
||||||
// optimizing for the common case where _fixedEditContext never changes.
|
// optimizing for the common case where _fixedEditContext never changes.
|
||||||
|
|
|
||||||
|
|
@ -23,7 +23,6 @@ namespace Microsoft.AspNetCore.Components.Forms
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
||||||
{
|
{
|
||||||
base.BuildRenderTree(builder);
|
|
||||||
builder.OpenElement(0, "input");
|
builder.OpenElement(0, "input");
|
||||||
builder.AddAttribute(1, "type", "checkbox");
|
builder.AddAttribute(1, "type", "checkbox");
|
||||||
builder.AddAttribute(2, "id", Id);
|
builder.AddAttribute(2, "id", Id);
|
||||||
|
|
|
||||||
|
|
@ -22,7 +22,6 @@ namespace Microsoft.AspNetCore.Components.Forms
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
||||||
{
|
{
|
||||||
base.BuildRenderTree(builder);
|
|
||||||
builder.OpenElement(0, "input");
|
builder.OpenElement(0, "input");
|
||||||
builder.AddAttribute(1, "type", "date");
|
builder.AddAttribute(1, "type", "date");
|
||||||
builder.AddAttribute(2, "id", Id);
|
builder.AddAttribute(2, "id", Id);
|
||||||
|
|
|
||||||
|
|
@ -61,7 +61,6 @@ namespace Microsoft.AspNetCore.Components.Forms
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
||||||
{
|
{
|
||||||
base.BuildRenderTree(builder);
|
|
||||||
builder.OpenElement(0, "input");
|
builder.OpenElement(0, "input");
|
||||||
builder.AddAttribute(1, "type", "number");
|
builder.AddAttribute(1, "type", "number");
|
||||||
builder.AddAttribute(2, "step", _stepAttributeValue);
|
builder.AddAttribute(2, "step", _stepAttributeValue);
|
||||||
|
|
|
||||||
|
|
@ -19,7 +19,6 @@ namespace Microsoft.AspNetCore.Components.Forms
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
||||||
{
|
{
|
||||||
base.BuildRenderTree(builder);
|
|
||||||
builder.OpenElement(0, "select");
|
builder.OpenElement(0, "select");
|
||||||
builder.AddAttribute(1, "id", Id);
|
builder.AddAttribute(1, "id", Id);
|
||||||
builder.AddAttribute(2, "class", CssClass);
|
builder.AddAttribute(2, "class", CssClass);
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,6 @@ namespace Microsoft.AspNetCore.Components.Forms
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
||||||
{
|
{
|
||||||
base.BuildRenderTree(builder);
|
|
||||||
builder.OpenElement(0, "input");
|
builder.OpenElement(0, "input");
|
||||||
builder.AddAttribute(1, "id", Id);
|
builder.AddAttribute(1, "id", Id);
|
||||||
builder.AddAttribute(2, "class", CssClass);
|
builder.AddAttribute(2, "class", CssClass);
|
||||||
|
|
|
||||||
|
|
@ -24,7 +24,6 @@ namespace Microsoft.AspNetCore.Components.Forms
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
||||||
{
|
{
|
||||||
base.BuildRenderTree(builder);
|
|
||||||
builder.OpenElement(0, "textarea");
|
builder.OpenElement(0, "textarea");
|
||||||
builder.AddAttribute(1, "id", Id);
|
builder.AddAttribute(1, "id", Id);
|
||||||
builder.AddAttribute(2, "class", CssClass);
|
builder.AddAttribute(2, "class", CssClass);
|
||||||
|
|
|
||||||
|
|
@ -64,8 +64,6 @@ namespace Microsoft.AspNetCore.Components.Forms
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
||||||
{
|
{
|
||||||
base.BuildRenderTree(builder);
|
|
||||||
|
|
||||||
foreach (var message in CurrentEditContext.GetValidationMessages(_fieldIdentifier))
|
foreach (var message in CurrentEditContext.GetValidationMessages(_fieldIdentifier))
|
||||||
{
|
{
|
||||||
builder.OpenElement(0, "div");
|
builder.OpenElement(0, "div");
|
||||||
|
|
|
||||||
|
|
@ -49,8 +49,6 @@ namespace Microsoft.AspNetCore.Components.Forms
|
||||||
/// <inheritdoc />
|
/// <inheritdoc />
|
||||||
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
||||||
{
|
{
|
||||||
base.BuildRenderTree(builder);
|
|
||||||
|
|
||||||
// As an optimization, only evaluate the messages enumerable once, and
|
// As an optimization, only evaluate the messages enumerable once, and
|
||||||
// only produce the enclosing <ul> if there's at least one message
|
// only produce the enclosing <ul> if there's at least one message
|
||||||
var messagesEnumerator = CurrentEditContext.GetValidationMessages().GetEnumerator();
|
var messagesEnumerator = CurrentEditContext.GetValidationMessages().GetEnumerator();
|
||||||
|
|
|
||||||
|
|
@ -380,7 +380,6 @@ namespace Microsoft.AspNetCore.Components.Test
|
||||||
|
|
||||||
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
||||||
{
|
{
|
||||||
base.BuildRenderTree(builder);
|
|
||||||
builder.OpenElement(0, "p");
|
builder.OpenElement(0, "p");
|
||||||
builder.AddContent(1, Counter);
|
builder.AddContent(1, Counter);
|
||||||
builder.CloseElement();
|
builder.CloseElement();
|
||||||
|
|
|
||||||
|
|
@ -3655,7 +3655,6 @@ namespace Microsoft.AspNetCore.Components.Test
|
||||||
|
|
||||||
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
||||||
{
|
{
|
||||||
base.BuildRenderTree(builder);
|
|
||||||
var renderFactory = WhatToRender[TestId];
|
var renderFactory = WhatToRender[TestId];
|
||||||
renderFactory(this)(builder);
|
renderFactory(this)(builder);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -482,7 +482,6 @@ namespace Microsoft.AspNetCore.Components.Rendering
|
||||||
|
|
||||||
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
||||||
{
|
{
|
||||||
base.BuildRenderTree(builder);
|
|
||||||
builder.OpenElement(0, "p");
|
builder.OpenElement(0, "p");
|
||||||
builder.AddContent(1, Value.ToString());
|
builder.AddContent(1, Value.ToString());
|
||||||
builder.CloseElement();
|
builder.CloseElement();
|
||||||
|
|
@ -513,7 +512,6 @@ namespace Microsoft.AspNetCore.Components.Rendering
|
||||||
|
|
||||||
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
protected override void BuildRenderTree(RenderTreeBuilder builder)
|
||||||
{
|
{
|
||||||
base.BuildRenderTree(builder);
|
|
||||||
builder.OpenElement(0, "p");
|
builder.OpenElement(0, "p");
|
||||||
builder.AddContent(1, Value.ToString());
|
builder.AddContent(1, Value.ToString());
|
||||||
builder.CloseElement();
|
builder.CloseElement();
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue