in src/React.Core/ReactComponent.cs [143:226]
public virtual void RenderHtml(TextWriter writer, bool renderContainerOnly = false, bool renderServerOnly = false, Action<Exception, string, string> exceptionHandler = null, IRenderFunctions renderFunctions = null)
{
if (!_configuration.UseServerSideRendering)
{
renderContainerOnly = true;
}
if (!renderContainerOnly)
{
EnsureComponentExists();
}
var html = string.Empty;
if (!renderContainerOnly)
{
var stringWriter = _sharedStringWriter;
if (stringWriter != null)
{
stringWriter.GetStringBuilder().Clear();
}
else
{
_sharedStringWriter = stringWriter = new StringWriter(new StringBuilder(_serializedProps.Length + 128));
}
try
{
stringWriter.Write(renderServerOnly ? "ReactDOMServer.renderToStaticMarkup(" : "ReactDOMServer.renderToString(");
if (renderFunctions != null)
{
stringWriter.Write(renderFunctions.WrapComponent(GetStringFromWriter(componentInitWriter => WriteComponentInitialiser(componentInitWriter))));
}
else
{
WriteComponentInitialiser(stringWriter);
}
stringWriter.Write(')');
if (renderFunctions != null)
{
renderFunctions.PreRender(x => _environment.Execute<string>(x));
html = _environment.Execute<string>(renderFunctions.TransformRenderedHtml(stringWriter.ToString()));
renderFunctions.PostRender(x => _environment.Execute<string>(x));
}
else
{
html = _environment.Execute<string>(stringWriter.ToString());
}
if (renderServerOnly)
{
writer.Write(html);
return;
}
}
catch (JsException ex)
{
if (exceptionHandler == null)
{
exceptionHandler = _configuration.ExceptionHandler;
}
exceptionHandler(ex, ComponentName, ContainerId);
}
}
writer.Write('<');
writer.Write(ContainerTag);
writer.Write(" id=\"");
writer.Write(ContainerId);
writer.Write('"');
if (!string.IsNullOrEmpty(ContainerClass))
{
writer.Write(" class=\"");
writer.Write(ContainerClass);
writer.Write('"');
}
writer.Write('>');
writer.Write(html);
writer.Write("</");
writer.Write(ContainerTag);
writer.Write('>');
}