我的编程空间,编程开发者的网络收藏夹
学习永远不晚

教你如何实现在react项目中嵌入Blazor

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

教你如何实现在react项目中嵌入Blazor

如何实现在react现有项目中嵌入Blazor?

目前官方只提供了angular和react俩种示例所以本教程只讲react教程

思路讲解:

首先在现有react项目中我们可能某些组件是在Blazor中完成,但是我们没办法找到怎么在react中轻量级使用blazor组件,可能会有人会使用iframe去加载Blazor项目,但是我不太喜欢这种方式,所以今天问了很多大佬,有大佬说可以直接在react使用Blazor组件的方式,并且找到了文档和示例(其实在Blazor文档中微软已经提到了这个但是由于在文档的在下面的示例中可能没什么人去看 [文档直通车](ASP.NET Core Razor 组件 | Microsoft Learn))

首先流程

创建react项目

npx create-react-app react-debug
cd react-debug
yarn or npm i

将以下代码添加到App.js

import React, { useState } from 'react';
import logo from './logo.svg';
import './App.css';

function App() {
    const [nextCounterIndex, setNextCounterIndex] = useState(1);
    const [blazorCounters, setBlazorCounters] = useState([]);
    const addBlazorCounter = () => {
        const index = nextCounterIndex;
        setNextCounterIndex(index + 1);
        setBlazorCounters(blazorCounters.concat([{
            title: `Counter ${index}`,
            incrementAmount: index,
        }]));
    };
    const removeBlazorCounter = () => {
        setBlazorCounters(blazorCounters.slice(0, -1));
    };

    return (
        <div className="App">
            <header className="App-header">
                <img class="lazy" data-src={logo} className="App-logo" alt="logo" />
                <p>
                    <button onClick={addBlazorCounter}>Add Blazor counter</button> &nbsp;
                    <button onClick={removeBlazorCounter}>Remove Blazor counter</button>
                </p>
    
                {blazorCounters.map(counter =>
                    <div key={counter.title}>
                        <my-blazor-counter title={counter.title} increment-amount={counter.incrementAmount}></my-blazor-counter> // 这里将是渲染razor组件的地方 `my-blazor-counter` 是在razor中定义的,会在下面讲到 
                    </div>
                )}
    
            </header>
        </div>
    );
}
export default App;

将以下引用添加到public/index.htmlMicrosoft.AspNetCore.Components.CustomElements/BlazorCustomElements.js是Microsoft.AspNetCore.Components.CustomElements 生成的

<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="utf-8" />
    <link rel="icon" href="%PUBLIC_URL%/favicon.ico" rel="external nofollow"  />
    <meta name="viewport" content="width=device-width, initial-scale=1" />
    <meta name="theme-color" content="#000000" />
    <meta
      name="description"
      content="Web site created using create-react-app"
    />
    <link rel="apple-touch-icon" href="%PUBLIC_URL%/logo192.png" rel="external nofollow"  />
    <link rel="manifest" href="%PUBLIC_URL%/manifest.json" rel="external nofollow"  />
    <title>React App</title>
  </head>
  <body>
    <noscript>You need to enable JavaScript to run this app.</noscript>
    <div id="root"></div>
    <script class="lazy" data-src="_content/Microsoft.AspNetCore.Components.CustomElements/BlazorCustomElements.js"></script> 
    <script class="lazy" data-src="_framework/blazor.webassembly.js"></script>
  </body>
</html>

创建WebAssembly项目

	mkdir webassembly 
	cd webassembly
	dotnet new blazorwasm-empty 

WebAssembly文件夹 并且在文件夹中创建 WebAssembly的空项目
需要确保项目是7.0 因为目前只支持6的预览和7的正式版
安装 Microsoft.AspNetCore.Components.CustomElements

<PackageReference="Microsoft.AspNetCore.Components.CustomElements" Version="7.0.2" />

Microsoft.AspNetCore.Components.CustomElements 是提供组件化的主要实现

修改Program.cs的代码

using Microsoft.AspNetCore.Components.Web;
using Microsoft.AspNetCore.Components.WebAssembly.Hosting;

var builder = WebAssemblyHostBuilder.CreateDefault(args);
// BlazorApp.Pages.Index可以修改成自己的渲染的razor组件
// my-blazor-counter就是上面提到的razor对应的标记 这样就可以在react通过my-blazor-counter去渲染BlazorApp.Pages.Index组件的内容了
builder.RootComponents.RegisterCustomElement<webassembly.Pages.Index>("my-blazor-counter");
builder.RootComponents.Add<HeadOutlet>("head::after");

await builder.Build().RunAsync();

webassembly.Pages.Index组件相关代码

<h1>@Title</h1>

<p role="status">Current count: @currentCount</p>
<p>Increment amount: @IncrementAmount</p>

<button class="btn btn-primary" @onclick="IncrementCount">Click me</button>

@code {
    private int currentCount = 0;
    
    [Parameter] public string Title { get; set; } = "Blazor Counter";
    [Parameter] public int? IncrementAmount { get; set; }

    private void IncrementCount()
    {
        currentCount += IncrementAmount.GetValueOrDefault(1);
    }
}

<style>
    button {
        font-weight: bold;
        background-color: #7b31b8;
        color: white;
        border-radius: 4px;
        padding: 4px 12px;
        border: none;
    }

    button:hover {
        background-color: #9654cc;
        cursor: pointer;
    }

    button:active {
        background-color: #b174e4;
    }

</style>

如何查看运行效果:

如果需要查看运行效果有很多种方式比如通过代码将Blazor和react的代理到一块这样就可以一边修改一边预览,

但是我现在做最简单的
先将react build生成

yarn build

将build目录下面的所有文件拷贝到webassembly\wwwroot下,并且覆盖index.html

然后执行dotnet程序 在webassembly目录下执行

dotnet watch

将会打开浏览器 ,效果入下图,我们可以添加 Add Blazor counter

效果将是这样,可以点击Click me将会条件 Current count数量 点击Remove Blazor counter将会删除razor组件

好了效果差不多是这样字,

通过这个案例我们可以知道 blazor也可以像react那样嵌入在任何的现有项目中,并且使用方便,如果是vue的话目前还不知道是否支持 目前官方只提供了angular和react俩种实现,并且支持webassembly和server,当前教程是WebAssembly的实践,Server会有所差异,

到此这篇关于教你如何实现在react现有项目中嵌入Blazor的文章就介绍到这了,更多相关reactt现有项目嵌入Blazor内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

教你如何实现在react项目中嵌入Blazor

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

教你如何实现在react项目中嵌入Blazor

这篇文章主要介绍了如何实现在react现有项目中嵌入Blazor,通过这个案例我们可以知道blazor也可以像react那样嵌入在任何的现有项目中,并且使用方便,需要的朋友可以参考下
2023-01-28

一文教你在现有Vue项目中嵌入Blazor项目

目前官方只提供了angular和react俩种示例,所以本教程将来讲解如何在Vue的现有项目中嵌入使用Blazor项目。文中的方法讲解详细,感兴趣的小伙伴可以了解一下
2023-01-28

在Java项目中如何实现实例化

今天就跟大家聊聊有关在Java项目中如何实现实例化,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。Java实例化的几种方法总结Java创建有四种方式:(1)用new 语句创建对象,这是
2023-05-31

C++如何在嵌入式系统中实现实时性?

在嵌入式系统中使用 c++++ 实现实时性至关重要,可以通过以下步骤实现:使用实时操作系统 (rtos) 来调度任务。组织任务并分配优先级,高优先级任务优先执行。使用互斥体或信号量来保证共享资源的一致性。使用实时时钟来精确计时,满足时间限制
C++如何在嵌入式系统中实现实时性?
2024-05-12

手把手教你如何在Goland中创建和运行项目

本文详解了如何使用GoLand创建和运行项目,包括安装GoLand和Go语言、新建项目、创建主程序文件、运行项目以及其他功能,如使用GoModule、调试、代码检查等。
手把手教你如何在Goland中创建和运行项目
2024-04-02

手把手教你如何在vue项目中使用rem布局

公司内部一直有大屏的需求,也一直再做,中途也踩了一些坑,但是没有认真的来总结下,下面这篇文章主要给大家介绍了关于如何在vue项目中使用rem布局的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
2023-02-08

如何在java项目中实现一个插入排序算法

如何在java项目中实现一个插入排序算法?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。一、基本概念 插入排序的基本操作就是将一个数据插入到已经排好序的有序数据中,
2023-05-31

FloydWarshall算法如何在java项目中实现

这期内容当中小编将会给大家带来有关FloydWarshall算法如何在java项目中实现,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。求一个图中任意两点之间的最短路径 FloydWarshall
2023-05-31

webservice方式如何在java项目中实现

webservice方式如何在java项目中实现?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。具体内容如下1、定义接口package org.enson.cha
2023-05-31

如何在Android项目中是SharedPreferences实现存储

如何在Android项目中是SharedPreferences实现存储?很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。SharedPreferences详解Sha
2023-05-31

浮点运算如何在Java项目中实现

这期内容当中小编将会给大家带来有关浮点运算如何在Java项目中实现,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。Java中浮点运算对于很多值浮点数都是采用其能够表示的离目标值最近的数来表示,这有可能会在计
2023-05-31

SHA-256加密如何在Java 项目中实现

本篇文章给大家分享的是有关SHA-256加密如何在Java 项目中实现,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。1、利用Apache的工具类实现加密:maven:
2023-05-31

绝对布局如何在Java项目中实现

绝对布局如何在Java项目中实现?相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。使用绝对布局的步骤如下:(1)使用 Container.setLayout(null) 方法取消
2023-05-31

如何在java项目中实现接口回调

这篇文章将为大家详细讲解有关如何在java项目中实现接口回调,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。java 接口回调实例详解首先官方对接口回调的定义是这样的,所谓回调:就是A类中调用
2023-05-31

静态方法如何在Kotlin项目中实现

本篇文章给大家分享的是有关静态方法如何在Kotlin项目中实现,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。工具类全都是静态方法的情况 : class 类名 改为 object
2023-05-31

如何在go语言项目中实现并发

这期内容当中小编将会给大家带来有关如何在go语言项目中实现并发,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。1、启动go语言的协程package main import ( "fmt" "ru
2023-06-08

C#中VB.NET如何实现在Word中嵌入多媒体文件

小编给大家分享一下C#中VB.NET如何实现在Word中嵌入多媒体文件,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!引入dll1.通过NuGet安装dll(2种方
2023-06-21

编程热搜

目录