public BaseReactSharpBlazor() { runtime = new ReactRuntime() { Step = () => { InvokeAsync(async() => { try { //var dom = new ReactRendererDOMJson(); var renderer = new ReactRenderer(runtime); runtime.Root = renderer.Render(Element, runtime.Root, dom); await JsRuntime.InvokeAsync <object>("reactSharp.renderJsonString", Ref, dom.StringWriter.ToString()); } catch (Exception e) { Console.WriteLine(e); throw; } }); } }; }
public void TestRenderer() { var render = new ReactRenderer(null); var element = new ReactElement($@" <b class='test1'> <div>eeee</div> <div>eeee</div> <div>eeee {222}</div> </b> "); var dom = new ReactRendererDOMJson(); var sw = Stopwatch.StartNew(); for (int i = 0; i < 100; i++) { render.Render(element, null, dom); } Console.WriteLine(sw.Elapsed); Console.WriteLine(dom.StringWriter.ToString().Length); Console.WriteLine(dom.StringWriter.ToString()); }
public void Run(string mainScriptPath, ReactRenderer renderer, Globals globals) { this.javascriptThread = new Thread(() => { try { var script = File.ReadAllText(mainScriptPath); Native.JsCreateRuntime(JavaScriptRuntimeAttributes.None, null, out runtime); Native.JsCreateContext(runtime, out context); Native.JsSetCurrentContext(context); globals.SetGlobals(context); var error = Native.JsRunScript(script, currentSourceContext++, "", out var __); while (error == JavaScriptErrorCode.NoError) { lock (renderer.handlesToInvoke) { while (renderer.handlesToInvoke.Count > 0) { var handle = renderer.handlesToInvoke.Dequeue(); error = Native.JsRunScript( $"process.natives.invokeCallback(\"{handle.Item1}\", \"{handle.Item2}\")", currentSourceContext++, "", out var _); } } Thread.Sleep(25); } Native.ThrowIfError(error); } catch (JavaScriptScriptException ex) { PrintJavaScriptError(ex); } catch (ThreadAbortException) { Native.JsSetCurrentContext(JavaScriptContext.Invalid); Native.JsDisposeRuntime(runtime); } }); javascriptThread.Start(); }
protected string DoPrerender() { try { var xml = new XElement("Template"); var dom = new ReactRendererXElement(xml); var renderer = new ReactRenderer(null); renderer.Render(Element, null, dom); var sb = new StringBuilder(); foreach (var xmlNode in xml.Nodes()) { sb.Append(xmlNode.ToString()); } return(sb.ToString()); } catch (Exception e) { Console.WriteLine(e); throw; } }
public ReactButtonElement(ReactRenderer renderer, BridgePayload.BridgeMessage.ComponentProps props) { this.renderer = renderer; this.UpdateProps(props); }
public MessageHandler(ReactRenderer renderer) { this.renderer = renderer; }