public static IHtmlString ReactRouter()

in src/React.Router/HtmlHelperExtensions.cs [87:152]


		public static IHtmlString ReactRouter<T>(
			this IHtmlHelper htmlHelper,
			string componentName,
			T props,
			string path = null,
			string htmlTag = null,
			string containerId = null,
			bool clientOnly = false,
			bool serverOnly = false,
			string containerClass = null,
			Action<HttpResponse, RoutingContext> contextHandler = null,
			IRenderFunctions renderFunctions = null
		)
		{
			try
			{
				var response = htmlHelper.ViewContext.HttpContext.Response;
				var request = htmlHelper.ViewContext.HttpContext.Request;
				var queryString = request != null && request.QueryString != null ? request.QueryString.ToString() : "";
				if (!string.IsNullOrWhiteSpace(queryString) && !queryString.StartsWith("?"))
				{
					queryString = $"?{queryString}";
				}
				path = path ?? request.Path.ToString() + queryString;

				var reactComponent
					= Environment.CreateRouterComponent(
						componentName,
						props,
						path,
						containerId,
						clientOnly
					);

				if (!string.IsNullOrEmpty(htmlTag))
				{
					reactComponent.ContainerTag = htmlTag;
				}
				if (!string.IsNullOrEmpty(containerClass))
				{
					reactComponent.ContainerClass = containerClass;
				}

				var executionResult = reactComponent.RenderRouterWithContext(clientOnly, serverOnly, renderFunctions);

				if (executionResult.Context?.status != null || executionResult.Context?.url != null)
				{
					// Use provided contextHandler
					if (contextHandler != null)
					{
						contextHandler(response, executionResult.Context);
					}
					// Handle routing context internally
					else
					{
						SetServerResponse.ModifyResponse(executionResult.Context, response);
					}
				}

				return new HtmlString(executionResult.RenderResult);
			}
			finally
			{
				Environment.ReturnEngineToPool();
			}
		}