Library to render React library components on the server-side with C# as well as on the client.
- Streaming, waiting for data, Suspnse and hydrateRoot... support via custom View Engine
- High performance
- Truly async
ReactJS.NET api is almost completely compatible except
- Not supported On-the-fly JSX to JavaScript compilation (only AddScriptWithoutTransform)
- Not supported render functions (ReactJS.NET v4 feature)
- Make sure you use @await Html.PartialAsync and @await Html.RenderAsync on cshtml views, synchronous calls can deadlock application
- Replace
- @Html.React to @await Html.ReactAsync
- @Html.ReactWithInit to @await Html.ReactAsync
- @Html.ReactRouter to @await Html.ReactRouterAsync
- Register NodeReact in service collection, example here
Ensure that any your server bundle define global variables for react like
global.React = require('react');
global.ReactDOM = require('react-dom');
global.ReactDOMServer = require('react-dom/server');
Make sure you have Node.JS installed
Configure Javascript.NodeJS for debug example
services.AddNodeReact(
config =>
{
config.EnginesCount = 1;
config.ConfigureOutOfProcessNodeJSService(o =>
{
o.NumRetries = 0;
o.InvocationTimeoutMS = -1;
});
config.ConfigureNodeJSProcess(o =>
{
o.NodeAndV8Options = "--inspect-brk";
});
config.AddScriptWithoutTransform("~/server.bundle.js");
config.UseDebugReact = true;
});
Than navigate to chrome://inspect/ in Chrome and click "Open dedicated DevTools for Node".
We do not support real-time JavaScript conversion. This is because there are many different build tools, compilers, transpilers, and programming languages, and configuring them all is not a simple task. It is impossible to create a one-size-fits-all compilation solution that is both high-performing and efficient. Instead, we suggest that you create your own server bundle by examining the sample provided in our repository.
I don't know how to do this easily and without a significant impact on performance. If you have any ideas, you can create a pull request