DaniilSokolyuk / NodeReact.NET

Library to render React library components on the server-side with C# as well as on the client.
MIT License
44 stars 6 forks source link
asp-net asp-net-core aspnet aspnetcore csharp dotnet dotnet-core dotnetcore javascript node nodejs react reactjs server-rendering server-side-rendering ssr

NodeReact.NET NuGet Version

Library to render React library components on the server-side with C# as well as on the client.

Features

Migration from ReactJS.NET

ReactJS.NET api is almost completely compatible except

  1. Make sure you use @await Html.PartialAsync and @await Html.RenderAsync on cshtml views, synchronous calls can deadlock application
  2. Replace
    • @Html.React to @await Html.ReactAsync
    • @Html.ReactWithInit to @await Html.ReactAsync
    • @Html.ReactRouter to @await Html.ReactRouterAsync
  3. 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".

Why isn't on-the-fly JSX to JavaScript compilation supported?

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.

Why isn't render functions supported?

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