ReactJs.NET

ReactJs.NET

 

REACTJS

React là một thư viện JavaScript mã nguồn mở được sử dụng để xây dựng giao diện người dùng. React cho tốc độ phản hồi tuyệt vời khi người dùng nhập bằng phương pháp mới ( JSX) để hiển thị trang web. React cho phép các nhà phát triển tạo các ứng dụng web lớn có thể thay đổi dữ liệu mà không cần tải lại trang. Mục đích chính của React là nhanh, có thể mở rộng và đơn giản. Tuy nhiên, React chỉ hoạt động trên giao diện người dùng trong ứng dụng.React tương ứng với View trong mẫu MVC. Ngoài ra, nó có thể được sử dụng với các thư viện JavaScript khác hoặc các framework như: Angular JS trong MVC

JSX

Trong React , ngoài việc sử dụng JavaScript thuần để tạo mẫu , nó còn sử dụng JSX để tốc độ nhanh hơn. JSX là một ngôn ngữ cho phép viết mã HTML trong JavaScript. Khác với JavaScript , JSX là một statically-typed , có nghĩa là nó được biên dịch trước khi chạy,giống như Java, C++ .Vì thế lỗi được phát hiện ngay trong quá trình biên dịch.

Tại sao sử dụng ReactJs?

  • Sự đơn giản : React sử dụng một cú pháp đặc biệt được gọi là JSX cho phép kết hợp HTML với JavaScript.
  • Dễ học : Bất cứ ai có kiến thức cơ bản về lập trình đều có thể dễ dàng hiểu được React. Với React, bạn chỉ cần có kiến thức cơ bản về CSS, JS và HTML.
  • Hiệu suất cùng với Virtual DOM : Khi bạn hiển thị một phần tử của JSX , mọi đối tượng virtual DOM đều được cập nhập.

REACTJS.NET

ReactJS.NET giúp việc sử dụng React cho C # và các ngôn ngữ .NET khác trở nên dễ dàng hơn, đặc biệt là cho  ASP.NET MVC (mặc dù nó cũng hoạt động với các môi trường khác). ReactJS.NET hỗ trợ cả ASP.NET 4 (với MVC 4 hoặc 5) và ASP.NET Core MVC. Ngoài ra , ReactJS.NET là nền tảng đa nền tảng nên nó có thể chạy trên Linux thông qua Mono hoặc .NET Core.

Bắt đầu ứng dụng ReactJS.NET với ASP.NET Core MVC

Tạo một dự án ASP.NET Core MVC mới

 

Cài đặt các gói

Đi đến Nuget Package Manager bằng cách nhấn chuột phải vào dự án ở trong Solution Explorer and chọn “Manage NuGet Packages…”.

Nhấn “Browse” sau đó tìm và cài đặt các gói :

  • JavaScriptEngineSwitcher.V8
  • React.AspNet
  • JavaScriptEngineSwitcher.V8.Native.win-x64
  • JavaScriptEngineSwitcher.Extensions.MsDependencyInjection

Cài đặt cấu hình

Tại file Startup.cs

Ở trên cùng của file Startup.cs thêm đoạn code phía dưới

using Microsoft.AspNetCore.Http;

using JavaScriptEngineSwitcher.V8;

using JavaScriptEngineSwitcher.Extensions.MsDependencyInjection;

using React.AspNet;

Thay đổi hàm ConfigureServices bằng đoạn code bên dưới

// This method gets called by the runtime. Use this method to add services to the container.
public void ConfigureServices(IServiceCollection services)
{
       services.AddSingleton<IHttpContextAccessor, HttpContextAccessor>();
       services.AddReact();
       // Make sure a JS engine is registered, or you will get an error!
       services.AddJsEngineSwitcher(options => options.DefaultEngineName =V8JsEngine.EngineName)
              .AddV8();
       services.AddControllersWithViews();
}

Thay đổi hàm Configure bằng đoạn code bên dưới

// This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
public void Configure(IApplicationBuilder app, IWebHostEnvironment env)
{
if (env.IsDevelopment())
{
    app.UseDeveloperExceptionPage();
}
else
{
    app.UseExceptionHandler("/Home/Error");
    // The default HSTS value is 30 days. You may want to change this for production scenarios, see        https://aka.ms/aspnetcore-hsts.
    app.UseHsts();
 }
 app.UseHttpsRedirection();
 app.UseReact(config =>
 {

 });
 app.UseStaticFiles();
 app.UseRouting();
 app.UseAuthorization()
 app.UseEndpoints(endpoints =
 {
    endpoints.MapControllerRoute(
    name: "default",
    pattern: "{controller=Home}/{action=Index}/{id?}");
 });
}

Thêm vào trên cùng của file Views\_ViewImports.cshtml

@using React.AspNet

Các đặc trưng

Component 

  • Trong React, các Component hoạt động giống như các hàm trả về các Component HTML.
  • Các Component là các Component độc lập và có thể tái sử dụng.
  • Có hai loại Component: Component Function và Component Class.
  • Các Component thực hiện các công việc tương tự như các hàm trong Javascript, nhưng chúng độc lập và trả về HTML thông qua hàm render.

Tạo component đầu tiên

Tạo file App.jsx 

Tạo file App.jsx với đoạn code phía dưới 

class FisrtComponent extends React.Component {
render() {
     return (
              <div className="component">
              Hello, world! This is a component.
              </div>
             );
         }
}

ReactDOM.render(<FisrtComponent />, document.getElementById('content')

Thay thế mã code của file index.cshtml bằng đoạn code bên dưới

@{
Layout = null;
}

<html>
<head>
    <title>Hello React</title>
</head>
<body>
 <div id="content"></div>
 <script  src="https://cdnjs.cloudflare.com/ajax/libs/react/16.13.0/umd/react.development.js"></script>
 <script  src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.13.0/umd/react-dom.development.js"></script>
 <script src="https://cdnjs.cloudflare.com/ajax/libs/remarkable/1.7.1/remarkable.min.js"></script>
 <script src="@Url.Content("~/js/App.jsx")"></script>
</body>
</html>

Tại hàm Configure trong file startup.config thêm đoạn code được in đậm bên dưới

app.UseReact(config =>
{
    config
    .AddScript("~/js/App.jsx");
});

Chạy dự án

Props

  • Props được sử dụng để truyền dữ liệu vào component.
  • Trong React, Props là các đối số được truyền vào các component React.
  • Props được chuyển đến các component thông qua các thuộc tính HTML.
  • Props có giá trị cố định không thể thay đổi.

Sử dụng props

Sử dụng props bằng cách sử dụng this.props để lấy giá trị của props giống với đoạn code bên dưới

class FisrtComponent extends React.Component {
render() {
        return (
            <div className="Component">
                <h1> Hello, world! This is a component. </h1>
                <h2> This is data from props : {this.props.value}</h2>
            </div>
        );
    }
}

ReactDOM.render(<FisrtComponent value = "Props test" />, document.getElementById('content'))

Kết quả

State

  • Các state giống như các biến cục bộ trong một cây component và các component con có thể sử dụng state của component mẹ.
  • Các state có thể thay đổi.
  • Khi đối tượng state thay đổi, component sẽ hiển thị lại.

Sử dụng State

Tạo các thuộc tính của state

constructor(props) {
        super(props);
        this.state = {
            brand: "Ford",
            color: "Blue",
            year: 1994
        };
}

Sử dụng this.setState để set giá trị cho những state này

this.setState({ color:"Red" })

Tạo hàm onclick để thay đổi state

changeColor = () => { this.setState({ color:"Red" }) }

Thêm sự kiện cho nút nhấn

<button
          type="button"
          onClick={this.changeColor}
>Change Color</button>

Kết quả

Trước khi nhấn nút

Sau khi nhấn nút

Các đặc trưng khác

  • Hook
  • Webpack
  • ES6

Tài liệu tham khảo