Begin differentiating between rendering as a new batch on in an existing batch (even though batches don't exist yet)
This commit is contained in:
parent
7799c36d50
commit
27d0ce4da9
|
|
@ -35,8 +35,8 @@ namespace Microsoft.AspNetCore.Blazor.Browser.Rendering
|
||||||
internal void DispatchBrowserEvent(int componentId, int renderTreeIndex, UIEventArgs eventArgs)
|
internal void DispatchBrowserEvent(int componentId, int renderTreeIndex, UIEventArgs eventArgs)
|
||||||
=> DispatchEvent(componentId, renderTreeIndex, eventArgs);
|
=> DispatchEvent(componentId, renderTreeIndex, eventArgs);
|
||||||
|
|
||||||
internal void RenderComponentInternal(int componentId)
|
internal void RenderNewBatchInternal(int componentId)
|
||||||
=> RenderComponent(componentId);
|
=> RenderNewBatch(componentId);
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Associates the <see cref="IComponent"/> with the <see cref="BrowserRenderer"/>,
|
/// Associates the <see cref="IComponent"/> with the <see cref="BrowserRenderer"/>,
|
||||||
|
|
@ -54,7 +54,7 @@ namespace Microsoft.AspNetCore.Blazor.Browser.Rendering
|
||||||
componentId);
|
componentId);
|
||||||
_rootComponents.Add(component);
|
_rootComponents.Add(component);
|
||||||
|
|
||||||
RenderComponent(componentId);
|
RenderNewBatch(componentId);
|
||||||
}
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
|
|
|
||||||
|
|
@ -35,7 +35,7 @@ namespace Microsoft.AspNetCore.Blazor.Browser.Rendering
|
||||||
string componentId)
|
string componentId)
|
||||||
{
|
{
|
||||||
var browserRenderer = BrowserRendererRegistry.Find(int.Parse(browserRendererId));
|
var browserRenderer = BrowserRendererRegistry.Find(int.Parse(browserRendererId));
|
||||||
browserRenderer.RenderComponentInternal(
|
browserRenderer.RenderNewBatchInternal(
|
||||||
int.Parse(componentId));
|
int.Parse(componentId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -260,7 +260,7 @@ namespace Microsoft.AspNetCore.Blazor.RenderTree
|
||||||
{
|
{
|
||||||
// TODO: Instead, call some OnPropertiesUpdated method on IComponent,
|
// TODO: Instead, call some OnPropertiesUpdated method on IComponent,
|
||||||
// whose default implementation causes itself to be rerendered
|
// whose default implementation causes itself to be rerendered
|
||||||
_renderer.RenderComponent(componentId);
|
_renderer.RenderInExistingBatch(componentId);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -55,8 +55,15 @@ namespace Microsoft.AspNetCore.Blazor.Rendering
|
||||||
/// Updates the rendered state of the specified <see cref="IComponent"/>.
|
/// Updates the rendered state of the specified <see cref="IComponent"/>.
|
||||||
/// </summary>
|
/// </summary>
|
||||||
/// <param name="componentId">The identifier of the <see cref="IComponent"/> to render.</param>
|
/// <param name="componentId">The identifier of the <see cref="IComponent"/> to render.</param>
|
||||||
protected internal void RenderComponent(int componentId)
|
protected internal void RenderNewBatch(int componentId)
|
||||||
=> GetRequiredComponentState(componentId).Render();
|
{
|
||||||
|
RenderInExistingBatch(componentId);
|
||||||
|
}
|
||||||
|
|
||||||
|
internal void RenderInExistingBatch(int componentId)
|
||||||
|
{
|
||||||
|
GetRequiredComponentState(componentId).Render();
|
||||||
|
}
|
||||||
|
|
||||||
/// <summary>
|
/// <summary>
|
||||||
/// Notifies the specified component that an event has occurred.
|
/// Notifies the specified component that an event has occurred.
|
||||||
|
|
|
||||||
|
|
@ -28,7 +28,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
|
||||||
|
|
||||||
// Act
|
// Act
|
||||||
var componentId = renderer.AssignComponentId(component);
|
var componentId = renderer.AssignComponentId(component);
|
||||||
renderer.RenderComponent(componentId);
|
renderer.RenderNewBatch(componentId);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Collection(renderer.RenderTreesByComponentId[componentId],
|
Assert.Collection(renderer.RenderTreesByComponentId[componentId],
|
||||||
|
|
@ -50,7 +50,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
|
||||||
|
|
||||||
// Act/Assert
|
// Act/Assert
|
||||||
var componentId = renderer.AssignComponentId(component);
|
var componentId = renderer.AssignComponentId(component);
|
||||||
renderer.RenderComponent(componentId);
|
renderer.RenderNewBatch(componentId);
|
||||||
var componentNode = renderer.RenderTreesByComponentId[componentId]
|
var componentNode = renderer.RenderTreesByComponentId[componentId]
|
||||||
.Single(node => node.NodeType == RenderTreeNodeType.Component);
|
.Single(node => node.NodeType == RenderTreeNodeType.Component);
|
||||||
var nestedComponentId = componentNode.ComponentId;
|
var nestedComponentId = componentNode.ComponentId;
|
||||||
|
|
@ -63,7 +63,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
|
||||||
Assert.False(renderer.RenderTreesByComponentId.ContainsKey(nestedComponentId));
|
Assert.False(renderer.RenderTreesByComponentId.ContainsKey(nestedComponentId));
|
||||||
|
|
||||||
// It can be rendered
|
// It can be rendered
|
||||||
renderer.RenderComponent(nestedComponentId);
|
renderer.RenderNewBatch(nestedComponentId);
|
||||||
Assert.Collection(renderer.RenderTreesByComponentId[nestedComponentId],
|
Assert.Collection(renderer.RenderTreesByComponentId[nestedComponentId],
|
||||||
node => AssertNode.Text(node, "Nested component output"));
|
node => AssertNode.Text(node, "Nested component output"));
|
||||||
}
|
}
|
||||||
|
|
@ -77,13 +77,13 @@ namespace Microsoft.AspNetCore.Blazor.Test
|
||||||
var componentId = renderer.AssignComponentId(component);
|
var componentId = renderer.AssignComponentId(component);
|
||||||
|
|
||||||
// Act/Assert: first render
|
// Act/Assert: first render
|
||||||
renderer.RenderComponent(componentId);
|
renderer.RenderNewBatch(componentId);
|
||||||
Assert.Collection(renderer.RenderTreesByComponentId[componentId],
|
Assert.Collection(renderer.RenderTreesByComponentId[componentId],
|
||||||
node => AssertNode.Text(node, "Initial message"));
|
node => AssertNode.Text(node, "Initial message"));
|
||||||
|
|
||||||
// Act/Assert: second render
|
// Act/Assert: second render
|
||||||
component.Message = "Modified message";
|
component.Message = "Modified message";
|
||||||
renderer.RenderComponent(componentId);
|
renderer.RenderNewBatch(componentId);
|
||||||
Assert.Collection(renderer.RenderTreesByComponentId[componentId],
|
Assert.Collection(renderer.RenderTreesByComponentId[componentId],
|
||||||
node => AssertNode.Text(node, "Modified message"));
|
node => AssertNode.Text(node, "Modified message"));
|
||||||
}
|
}
|
||||||
|
|
@ -99,7 +99,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
|
||||||
builder.CloseElement();
|
builder.CloseElement();
|
||||||
});
|
});
|
||||||
var parentComponentId = renderer.AssignComponentId(parentComponent);
|
var parentComponentId = renderer.AssignComponentId(parentComponent);
|
||||||
renderer.RenderComponent(parentComponentId);
|
renderer.RenderNewBatch(parentComponentId);
|
||||||
var nestedComponentNode = renderer.RenderTreesByComponentId[parentComponentId]
|
var nestedComponentNode = renderer.RenderTreesByComponentId[parentComponentId]
|
||||||
.Single(node => node.NodeType == RenderTreeNodeType.Component);
|
.Single(node => node.NodeType == RenderTreeNodeType.Component);
|
||||||
var nestedComponent = (MessageComponent)nestedComponentNode.Component;
|
var nestedComponent = (MessageComponent)nestedComponentNode.Component;
|
||||||
|
|
@ -107,13 +107,13 @@ namespace Microsoft.AspNetCore.Blazor.Test
|
||||||
|
|
||||||
// Act/Assert: inital render
|
// Act/Assert: inital render
|
||||||
nestedComponent.Message = "Render 1";
|
nestedComponent.Message = "Render 1";
|
||||||
renderer.RenderComponent(nestedComponentId);
|
renderer.RenderNewBatch(nestedComponentId);
|
||||||
Assert.Collection(renderer.RenderTreesByComponentId[nestedComponentId],
|
Assert.Collection(renderer.RenderTreesByComponentId[nestedComponentId],
|
||||||
node => AssertNode.Text(node, "Render 1"));
|
node => AssertNode.Text(node, "Render 1"));
|
||||||
|
|
||||||
// Act/Assert: re-render
|
// Act/Assert: re-render
|
||||||
nestedComponent.Message = "Render 2";
|
nestedComponent.Message = "Render 2";
|
||||||
renderer.RenderComponent(nestedComponentId);
|
renderer.RenderNewBatch(nestedComponentId);
|
||||||
Assert.Collection(renderer.RenderTreesByComponentId[nestedComponentId],
|
Assert.Collection(renderer.RenderTreesByComponentId[nestedComponentId],
|
||||||
node => AssertNode.Text(node, "Render 2"));
|
node => AssertNode.Text(node, "Render 2"));
|
||||||
}
|
}
|
||||||
|
|
@ -130,7 +130,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
|
||||||
Handler = args => { receivedArgs = args; }
|
Handler = args => { receivedArgs = args; }
|
||||||
};
|
};
|
||||||
var componentId = renderer.AssignComponentId(component);
|
var componentId = renderer.AssignComponentId(component);
|
||||||
renderer.RenderComponent(componentId);
|
renderer.RenderNewBatch(componentId);
|
||||||
|
|
||||||
var (eventHandlerNodeIndex, _) = FirstWithIndex(
|
var (eventHandlerNodeIndex, _) = FirstWithIndex(
|
||||||
renderer.RenderTreesByComponentId[componentId],
|
renderer.RenderTreesByComponentId[componentId],
|
||||||
|
|
@ -158,7 +158,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
|
||||||
builder.CloseElement();
|
builder.CloseElement();
|
||||||
});
|
});
|
||||||
var parentComponentId = renderer.AssignComponentId(parentComponent);
|
var parentComponentId = renderer.AssignComponentId(parentComponent);
|
||||||
renderer.RenderComponent(parentComponentId);
|
renderer.RenderNewBatch(parentComponentId);
|
||||||
|
|
||||||
// Arrange: Render nested component
|
// Arrange: Render nested component
|
||||||
var nestedComponentNode = renderer.RenderTreesByComponentId[parentComponentId]
|
var nestedComponentNode = renderer.RenderTreesByComponentId[parentComponentId]
|
||||||
|
|
@ -166,7 +166,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
|
||||||
var nestedComponent = (EventComponent)nestedComponentNode.Component;
|
var nestedComponent = (EventComponent)nestedComponentNode.Component;
|
||||||
nestedComponent.Handler = args => { receivedArgs = args; };
|
nestedComponent.Handler = args => { receivedArgs = args; };
|
||||||
var nestedComponentId = nestedComponentNode.ComponentId;
|
var nestedComponentId = nestedComponentNode.ComponentId;
|
||||||
renderer.RenderComponent(nestedComponentId);
|
renderer.RenderNewBatch(nestedComponentId);
|
||||||
|
|
||||||
// Find nested component's event handler ndoe
|
// Find nested component's event handler ndoe
|
||||||
var (eventHandlerNodeIndex, _) = FirstWithIndex(
|
var (eventHandlerNodeIndex, _) = FirstWithIndex(
|
||||||
|
|
@ -191,7 +191,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
|
||||||
// Act/Assert
|
// Act/Assert
|
||||||
Assert.Throws<ArgumentException>(() =>
|
Assert.Throws<ArgumentException>(() =>
|
||||||
{
|
{
|
||||||
renderer.RenderComponent(123);
|
renderer.RenderNewBatch(123);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -220,12 +220,12 @@ namespace Microsoft.AspNetCore.Blazor.Test
|
||||||
var renderer2ComponentId = renderer2.AssignComponentId(component);
|
var renderer2ComponentId = renderer2.AssignComponentId(component);
|
||||||
|
|
||||||
// Act/Assert: Render component in renderer1
|
// Act/Assert: Render component in renderer1
|
||||||
renderer1.RenderComponent(renderer1ComponentId);
|
renderer1.RenderNewBatch(renderer1ComponentId);
|
||||||
Assert.True(renderer1.RenderTreesByComponentId.ContainsKey(renderer1ComponentId));
|
Assert.True(renderer1.RenderTreesByComponentId.ContainsKey(renderer1ComponentId));
|
||||||
Assert.False(renderer2.RenderTreesByComponentId.ContainsKey(renderer2ComponentId));
|
Assert.False(renderer2.RenderTreesByComponentId.ContainsKey(renderer2ComponentId));
|
||||||
|
|
||||||
// Act/Assert: Render same component in renderer2
|
// Act/Assert: Render same component in renderer2
|
||||||
renderer2.RenderComponent(renderer2ComponentId);
|
renderer2.RenderNewBatch(renderer2ComponentId);
|
||||||
Assert.True(renderer2.RenderTreesByComponentId.ContainsKey(renderer2ComponentId));
|
Assert.True(renderer2.RenderTreesByComponentId.ContainsKey(renderer2ComponentId));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -271,7 +271,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
|
||||||
// Assert
|
// Assert
|
||||||
Assert.ThrowsAny<Exception>(() =>
|
Assert.ThrowsAny<Exception>(() =>
|
||||||
{
|
{
|
||||||
renderer.RenderComponent(componentId);
|
renderer.RenderNewBatch(componentId);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -295,7 +295,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
|
||||||
GC.Collect();
|
GC.Collect();
|
||||||
GC.WaitForPendingFinalizers();
|
GC.WaitForPendingFinalizers();
|
||||||
|
|
||||||
renderer.RenderComponent(componentId);
|
renderer.RenderNewBatch(componentId);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.True(didRender);
|
Assert.True(didRender);
|
||||||
|
|
@ -315,7 +315,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
|
||||||
});
|
});
|
||||||
|
|
||||||
var rootComponentId = renderer.AssignComponentId(component);
|
var rootComponentId = renderer.AssignComponentId(component);
|
||||||
renderer.RenderComponent(rootComponentId);
|
renderer.RenderNewBatch(rootComponentId);
|
||||||
|
|
||||||
var nestedComponentInstance = (MessageComponent)renderer.RenderTreesByComponentId[rootComponentId]
|
var nestedComponentInstance = (MessageComponent)renderer.RenderTreesByComponentId[rootComponentId]
|
||||||
.Single(node => node.NodeType == RenderTreeNodeType.Component)
|
.Single(node => node.NodeType == RenderTreeNodeType.Component)
|
||||||
|
|
@ -323,7 +323,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
|
||||||
|
|
||||||
// Act: Second render
|
// Act: Second render
|
||||||
message = "Modified message";
|
message = "Modified message";
|
||||||
renderer.RenderComponent(rootComponentId);
|
renderer.RenderNewBatch(rootComponentId);
|
||||||
|
|
||||||
// Assert
|
// Assert
|
||||||
Assert.Collection(renderer.RenderTreesByComponentId[rootComponentId],
|
Assert.Collection(renderer.RenderTreesByComponentId[rootComponentId],
|
||||||
|
|
@ -348,7 +348,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
|
||||||
});
|
});
|
||||||
|
|
||||||
var rootComponentId = renderer.AssignComponentId(component);
|
var rootComponentId = renderer.AssignComponentId(component);
|
||||||
renderer.RenderComponent(rootComponentId);
|
renderer.RenderNewBatch(rootComponentId);
|
||||||
|
|
||||||
var originalComponentInstance = (FakeComponent)renderer.RenderTreesByComponentId[rootComponentId]
|
var originalComponentInstance = (FakeComponent)renderer.RenderTreesByComponentId[rootComponentId]
|
||||||
.Single(node => node.NodeType == RenderTreeNodeType.Component)
|
.Single(node => node.NodeType == RenderTreeNodeType.Component)
|
||||||
|
|
@ -361,7 +361,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
|
||||||
|
|
||||||
// Act: Second render
|
// Act: Second render
|
||||||
firstRender = false;
|
firstRender = false;
|
||||||
renderer.RenderComponent(rootComponentId);
|
renderer.RenderNewBatch(rootComponentId);
|
||||||
|
|
||||||
var updatedComponentInstance = (FakeComponent)renderer.RenderTreesByComponentId[rootComponentId]
|
var updatedComponentInstance = (FakeComponent)renderer.RenderTreesByComponentId[rootComponentId]
|
||||||
.Single(node => node.NodeType == RenderTreeNodeType.Component)
|
.Single(node => node.NodeType == RenderTreeNodeType.Component)
|
||||||
|
|
@ -388,7 +388,7 @@ namespace Microsoft.AspNetCore.Blazor.Test
|
||||||
});
|
});
|
||||||
|
|
||||||
var rootComponentId = renderer.AssignComponentId(component);
|
var rootComponentId = renderer.AssignComponentId(component);
|
||||||
renderer.RenderComponent(rootComponentId);
|
renderer.RenderNewBatch(rootComponentId);
|
||||||
|
|
||||||
var childComponentId = renderer.RenderTreesByComponentId[rootComponentId]
|
var childComponentId = renderer.RenderTreesByComponentId[rootComponentId]
|
||||||
.Single(node => node.NodeType == RenderTreeNodeType.Component)
|
.Single(node => node.NodeType == RenderTreeNodeType.Component)
|
||||||
|
|
@ -396,11 +396,11 @@ namespace Microsoft.AspNetCore.Blazor.Test
|
||||||
|
|
||||||
// This isn't strictly necessary for the test, but it's more common for components
|
// This isn't strictly necessary for the test, but it's more common for components
|
||||||
// to be updated after their first render than before it
|
// to be updated after their first render than before it
|
||||||
renderer.RenderComponent(childComponentId);
|
renderer.RenderNewBatch(childComponentId);
|
||||||
|
|
||||||
// Act: Second render
|
// Act: Second render
|
||||||
firstRender = false;
|
firstRender = false;
|
||||||
renderer.RenderComponent(rootComponentId);
|
renderer.RenderNewBatch(rootComponentId);
|
||||||
|
|
||||||
var updatedComponentNode = renderer.RenderTreesByComponentId[rootComponentId]
|
var updatedComponentNode = renderer.RenderTreesByComponentId[rootComponentId]
|
||||||
.Single(node => node.NodeType == RenderTreeNodeType.Component);
|
.Single(node => node.NodeType == RenderTreeNodeType.Component);
|
||||||
|
|
@ -415,8 +415,8 @@ namespace Microsoft.AspNetCore.Blazor.Test
|
||||||
public new int AssignComponentId(IComponent component)
|
public new int AssignComponentId(IComponent component)
|
||||||
=> base.AssignComponentId(component);
|
=> base.AssignComponentId(component);
|
||||||
|
|
||||||
public new void RenderComponent(int componentId)
|
public new void RenderNewBatch(int componentId)
|
||||||
=> base.RenderComponent(componentId);
|
=> base.RenderNewBatch(componentId);
|
||||||
|
|
||||||
protected internal override void UpdateDisplay(int componentId, RenderTreeDiff renderTreeDiff)
|
protected internal override void UpdateDisplay(int componentId, RenderTreeDiff renderTreeDiff)
|
||||||
{
|
{
|
||||||
|
|
@ -431,8 +431,8 @@ namespace Microsoft.AspNetCore.Blazor.Test
|
||||||
public new int AssignComponentId(IComponent component)
|
public new int AssignComponentId(IComponent component)
|
||||||
=> base.AssignComponentId(component);
|
=> base.AssignComponentId(component);
|
||||||
|
|
||||||
public new void RenderComponent(int componentId)
|
public new void RenderNewBatch(int componentId)
|
||||||
=> base.RenderComponent(componentId);
|
=> base.RenderNewBatch(componentId);
|
||||||
|
|
||||||
public new void DispatchEvent(int componentId, int renderTreeIndex, UIEventArgs args)
|
public new void DispatchEvent(int componentId, int renderTreeIndex, UIEventArgs args)
|
||||||
=> base.DispatchEvent(componentId, renderTreeIndex, args);
|
=> base.DispatchEvent(componentId, renderTreeIndex, args);
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue