在 Blazor 页面内渲染react组件

IT技术 c# asp.net reactjs razor blazor
2021-05-12 02:26:02

是否可以在 Blazor 页面内呈现 React 组件?我尝试向 Blazor 页面添加脚本标签,但 Blazor 不允许添加脚本标签。

谢谢你的回答。

1个回答

是否可以在 Blazor 页面内呈现 React 组件?

是的,这是可能的。React 是一个 javascript 库,与您可以向 blazor 应用程序添加 jquery 的方式相同,您也可以向其中添加 React,但它有一些缺点。

我尝试向 Blazor 页面添加脚本标签,但 Blazor 不允许添加脚本标签。

事实上,你不能在.razor文件中添加脚本标签,你应该添加的地方是在_Host.cshtml文件中

现在你可能会问,如何将 React 添加到 Blazor 应用程序?嗯。。有点复杂。

您需要做的是配置一个 webpack 以从 React 生成所有文件,然后放入wwwroot并引用文件中的所有脚本和链接_Host.cshtml

然后你需要附加window一个函数来渲染你的react组件,比如

// index.js from react
window.renderReactApp = function() {
    ReactDOM.render(<App />, document.getElementById("react-div"))
}

将 React 添加到 blazor 应用程序的缺点

1. React 和 Blazor 之间的通信。

如果您需要在 React 和 Blazor 之间传递数据(状态),这将是一场大斗争,您将需要创建某种 Flux 模式作为两者之间的桥梁。这需要时间来完成并且使用它可能会令人困惑。

2. 为 Blazor 可能做的事情付出太多努力

如果您已经在使用 Blazor 并想要添加 React,则您需要有非常充分的理由这样做。否则,您将在一些本可以在 Blazor 中轻松完成的事情上浪费太多时间

将 React 添加到 Blazor 的充分理由

有很多 js 库可能无法使用 Blazor 创建,或者如果有人这样做,可能只是 js 的包装器,并且......

到目前为止,Blazor 没有给你任何方式来做 webpack 可以做的事情,所以在某些情况下,你有很多 javascript 或 css,你会想要配置一个 webpack 来缩小/做你需要的事情文件。在这种情况下,如果您已经为此配置了 webpack,添加 react 就没有问题了。

其中一个例子是MatBlazor他们使用了大量来自 Material Design 网页组件的 js 和 css,所以他们使用webpack来打包所有东西。他们不使用 React,但它是如何在 blazor 中使用 webpack 的示例(您需要做一些事情才能在 blazor 应用程序中使用 React)