Skip to content
Prev Previous commit
Next Next commit
Don't render container for server side only components
  • Loading branch information
Gustav Tonér committed Jan 16, 2018
commit 3abfe4947ab8ab603aa0fffd52a217e98b67bbc8
5 changes: 5 additions & 0 deletions src/React.Core/ReactComponent.cs
Original file line number Diff line number Diff line change
Expand Up @@ -135,6 +135,11 @@ public virtual string RenderHtml(bool renderContainerOnly = false, bool renderSe
? string.Format("ReactDOMServer.renderToStaticMarkup({0})", GetComponentInitialiser())
: string.Format("ReactDOMServer.renderToString({0})", GetComponentInitialiser());
html = _environment.Execute<string>(reactRenderCommand);

if (renderServerOnly)
{
return html;
}
}
catch (JsRuntimeException ex)
{
Expand Down
39 changes: 39 additions & 0 deletions tests/React.Tests/Core/ReactComponentTest.cs
Original file line number Diff line number Diff line change
Expand Up @@ -124,6 +124,45 @@ public void RenderHtmlShouldWrapComponentInCustomElement()
Assert.Equal(@"<span id=""container"">[HTML]</span>", result);
}

[Fact]
public void RenderHtmlShouldNotRenderComponentWhenContainerOnly()
{
var config = new Mock<IReactSiteConfiguration>();
config.Setup(x => x.UseServerSideRendering).Returns(true);
var environment = new Mock<IReactEnvironment>();
environment.Setup(x => x.Execute<bool>("typeof Foo !== 'undefined'")).Returns(true);
environment.Setup(x => x.Execute<string>(@"ReactDOMServer.renderToString(React.createElement(Foo, {""hello"":""World""}))"))
.Returns("[HTML]");

var component = new ReactComponent(environment.Object, config.Object, "Foo", "container")
{
Props = new { hello = "World" },
ContainerTag = "span"
};
var result = component.RenderHtml(true, false);

Assert.Equal(@"<span id=""container""></span>", result);
}

[Fact]
public void RenderHtmlShouldNotWrapComponentWhenServerSideOnly()
{
var config = new Mock<IReactSiteConfiguration>();
config.Setup(x => x.UseServerSideRendering).Returns(true);
var environment = new Mock<IReactEnvironment>();
environment.Setup(x => x.Execute<bool>("typeof Foo !== 'undefined'")).Returns(true);
environment.Setup(x => x.Execute<string>(@"ReactDOMServer.renderToStaticMarkup(React.createElement(Foo, {""hello"":""World""}))"))
.Returns("[HTML]");

var component = new ReactComponent(environment.Object, config.Object, "Foo", "container")
{
Props = new { hello = "World" },
};
var result = component.RenderHtml(false, true);

Assert.Equal(@"[HTML]", result);
}

[Fact]
public void RenderHtmlShouldAddClassToElement()
{
Expand Down