ProductiveRage / Bridge.React

Bindings for Bridge.NET for React - write React applications in C#!
MIT License
74 stars 14 forks source link

ReactDOM is not defined #62

Open radleta opened 5 years ago

radleta commented 5 years ago

I'm getting a JavaScript error ReactDOM is not defined trying to use the below combination of dependencies.

<package id="Bridge" version="17.9.0" targetFramework="net461" />
  <package id="Bridge.Console" version="1.0.1" targetFramework="net45" />
  <package id="Bridge.Core" version="17.9.0" targetFramework="net461" />
  <package id="Bridge.Html5" version="17.9.0" targetFramework="net461" />
  <package id="Bridge.Min" version="17.9.0" targetFramework="net461" />
  <package id="Bridge.Newtonsoft.Json" version="1.16.0" targetFramework="net461" />
  <package id="Bridge.React" version="5.2.0" targetFramework="net461" />
  <package id="Bridge.ReactLoader" version="16.4.2" targetFramework="net461" />
  <package id="ProductiveRage.Immutable" version="4.2.0" targetFramework="net461" />
  <package id="ProductiveRage.Immutable.Extensions" version="5.2.0" targetFramework="net461" />
  <package id="ProductiveRage.ReactRouting" version="7.1.0" targetFramework="net461" />  

The error occurs on this line.

Javascript (Bridge.net output)

ReactDOM.render(...);

C# Source

React.Render(...);

I did make sure the react-dom-16.4.0.development.js file is getting loaded prior to the Bridge.net emitted JS file the error occurs.

bootstrap.min.css
site.css
jquery-3.3.1.slim.min.js
popper.min.js
bootstrap.min.js
require.js
backend.js
app.js
favicon.ico
bridge.js?_r=1567824754632
react-16.4.0.development.js?_r=1567824754632
react-dom-16.4.0.development.js?_r=1567824754632
bridge.console.js?_r=1567824754632
bridge.react.js?_r=1567824754632
newtonsoft.json.js?_r=1567824754632
ProductiveRage.ReactRouting.Meta.js?_r=1567824754632
ProductiveRage.Immutable.Meta.js?_r=1567824754632
bridge.meta.js?_r=1567824754632
ProductiveRage.Immutable.js?_r=1567824754632
ProductiveRage.Immutable.Extensions.js?_r=1567824754632
ProductiveRage.ReactRouting.js?_r=1567824754632

Reviewing the output Javascript by Bridge.net. I don't see ReactDOM defined anywhere in the JS output.

The workaround to fix the error is to define the below in my Main method.

C# Source

        [Init(InitPosition.Top)]
        public static void Top()
        {
            var React = Retyped.requirejs.require.Self("react");
            var ReactDOM = Retyped.requirejs.require.Self("reactdom");
        }

RequireJS Config Snippet

    reactdom: 'react-dom-16.4.0.development',

This forces the ReactDOM object to exist prior to the JS execution.

I must be missing something simple and easy.

I'd like to get this working without this workaround. Any suggestions?