public void RenderJavaScriptShouldHandleWaitForContentLoad(bool clientOnly, bool useServerSideRendering)
        {
            var environment = new Mock <IReactEnvironment>();
            var config      = new Mock <IReactSiteConfiguration>();

            config.Setup(x => x.UseServerSideRendering).Returns(useServerSideRendering);
            var reactIdGenerator = new Mock <IReactIdGenerator>();

            var component = new ReactRouterComponent(environment.Object, config.Object, reactIdGenerator.Object, "Foo", "container", "/bar")
            {
                Props      = new { hello = "World" },
                ClientOnly = clientOnly
            };
            var result = component.RenderJavaScript(true);

            if (clientOnly || !useServerSideRendering)
            {
                Assert.Equal(
                    @"window.addEventListener('DOMContentLoaded', function() {ReactDOM.render(React.createElement(Foo, {""hello"":""World""}), document.getElementById(""container""))});",
                    result
                    );
            }
            else
            {
                Assert.Equal(
                    @"window.addEventListener('DOMContentLoaded', function() {ReactDOM.hydrate(React.createElement(Foo, {""hello"":""World""}), document.getElementById(""container""))});",
                    result
                    );
            }
        }
        public void RenderJavaScriptShouldNotIncludeContextOrPath(bool clientOnly, bool useServerSideRendering)
        {
            var environment = new Mock <IReactEnvironment>();
            var config      = new Mock <IReactSiteConfiguration>();

            config.Setup(x => x.UseServerSideRendering).Returns(useServerSideRendering);
            var reactIdGenerator = new Mock <IReactIdGenerator>();

            var component = new ReactRouterComponent(environment.Object, config.Object, reactIdGenerator.Object, "Foo", "container", "/bar")
            {
                Props      = new { hello = "World" },
                ClientOnly = clientOnly,
            };
            var result = component.RenderJavaScript(false);

            if (clientOnly || !useServerSideRendering)
            {
                Assert.Equal(
                    @"ReactDOM.render(React.createElement(Foo, {""hello"":""World""}), document.getElementById(""container""))",
                    result
                    );
            }
            else
            {
                Assert.Equal(
                    @"ReactDOM.hydrate(React.createElement(Foo, {""hello"":""World""}), document.getElementById(""container""))",
                    result
                    );
            }
        }
示例#3
0
        public void RenderJavaScriptShouldNotIncludeContextOrPath()
        {
            var environment = new Mock <IReactEnvironment>();
            var config      = new Mock <IReactSiteConfiguration>();

            var component = new ReactRouterComponent(environment.Object, config.Object, "Foo", "container", "/bar")
            {
                Props = new { hello = "World" }
            };
            var result = component.RenderJavaScript();

            Assert.Equal(
                @"ReactDOM.hydrate(React.createElement(Foo, {""hello"":""World""}), document.getElementById(""container""))",
                result
                );
        }
        public void RenderJavaScriptShouldHandleWaitForContentLoad()
        {
            var environment      = new Mock <IReactEnvironment>();
            var config           = new Mock <IReactSiteConfiguration>();
            var reactIdGenerator = new Mock <IReactIdGenerator>();

            var component = new ReactRouterComponent(environment.Object, config.Object, reactIdGenerator.Object, "Foo", "container", "/bar")
            {
                Props = new { hello = "World" }
            };
            var result = component.RenderJavaScript(true);

            Assert.Equal(
                @"window.addEventListener('DOMContentLoaded', function() {ReactDOM.hydrate(React.createElement(Foo, {""hello"":""World""}), document.getElementById(""container""))});",
                result
                );
        }
        /// <summary>
        /// Create a React Router Component with context and add it to the list of components to render client side,
        /// if applicable.
        /// </summary>
        /// <typeparam name="T">Type of the props</typeparam>
        /// <param name="env">React Environment</param>
        /// <param name="componentName">Name of the component</param>
        /// <param name="props">Props to use</param>
        /// <param name="path">F.x. from Request.Path. Used by React Static Router to determine context and routing.</param>
        /// <param name="containerId">ID to use for the container HTML tag. Defaults to an auto-generated ID</param>
        /// <param name="clientOnly">True if server-side rendering will be bypassed. Defaults to false.</param>
        /// <returns></returns>
        public static ReactRouterComponent CreateRouterComponent <T>(
            this IReactEnvironment env,
            string componentName,
            T props,
            string path,
            string containerId = null,
            bool clientOnly    = false
            )
        {
            var component = new ReactRouterComponent(
                env,
                AssemblyRegistration.Container.Resolve <IReactSiteConfiguration>(),
                AssemblyRegistration.Container.Resolve <IReactIdGenerator>(),
                componentName,
                containerId,
                path
                )
            {
                Props = props,
            };

            return(env.CreateComponent(component, clientOnly) as ReactRouterComponent);
        }