خبر و ترفند روز

خبر و ترفند های روز را اینجا بخوانید!

Angular JS در مقابل React JS

اگر مطمئن نیستید که چگونه بین Angular و React یکی را انتخاب کنید، یک برنامه نمونه ساده را بررسی کنید تا تفاوت ها را بررسی کنید.

Angular و React دو فریم ورک فرانت اند برتر برای برنامه های کاربردی وب هستند. اگرچه دامنه آنها کمی متفاوت است (یکی یک پلت فرم توسعه، دیگری یک کتابخانه)، آنها به عنوان رقبای اصلی در نظر گرفته می شوند. می توان فرض کرد که می توانید از هر یک از فریم ورک ها برای توسعه یک برنامه استفاده کنید.

سوال اصلی این است: چرا یکی را بر دیگری انتخاب می کنید؟ این مقاله قصد دارد با ایجاد یک فرم ثبت نام ساده به آن پاسخ دهد. این فرم صرفاً بر قابلیت های اعتبارسنجی هر فریم ورک متکی است.

پیش نیازها

برای ادامه، باید بتوانید React را نصب کنید و درک کلی از نحوه عملکرد یک برنامه React داشته باشید. همچنین باید نحوه نصب و استفاده از Angular را بدانید.

ساختار فایل هر برنامه

فرم React دارای ساختار فایل زیر است:

ساختار فایل فرم React

فرم Angular دارای ساختار فایل زیر است:

ساختار فایل فرم زاویه ای

تصویر بالا فقط بخش ویرایش شده برنامه Angular را نشان می دهد.

از ساختار فایل بالا می توانید ببینید که هر دو فریم ورک به شدت به استفاده از کامپوننت ها متکی هستند.

ایجاد منطق برای هر فرم درخواست

هر برنامه یک هدف را خواهد داشت: فرم تنها در صورتی ارسال می شود که هر فیلد ورودی حاوی داده های معتبر باشد. فیلد نام کاربری در صورتی معتبر است که حاوی حداقل یک کاراکتر باشد. دو فیلد رمز عبور در صورتی معتبر هستند که مقادیر آنها یکسان باشد.

Angular دو روش ایجاد فرم را ارائه می دهد: الگو محور و واکنشی. رویکرد واکنشی به توسعه دهنده اجازه می دهد تا معیارهای اعتبار سنجی سفارشی را ایجاد کند. رویکرد الگو محور دارای ویژگی هایی است که اعتبار سنجی فرم را ساده می کند.

React تنها قادر به توسعه فرمی با اعتبارسنجی سفارشی است. با این حال، React چارچوب محبوب‌تری است و جامعه بزرگ‌تری دارد، بنابراین بسیاری از کتابخانه‌های مدیریت فرم برای React در دسترس هستند. با توجه به اینکه هدف در اینجا اجتناب از استفاده از کتابخانه های خارجی است، برنامه React بر اعتبارسنجی سفارشی تکیه می کند.

توسعه الگو برای هر برنامه

هر دو برنامه برای ایجاد خروجی نهایی HTML به قالب ها متکی هستند.

قالب HTML Angular

فایل form-signup.component.html حاوی کد زیر است:

<div class="form-content">
    <form class="form" #myForm="ngForm">
        <h1>Complete the form to join our community!</h1>
 
        <div class="form-inputs">
            <label for="username" class="form-label">Username:</label>
 
            <input
                id="username"
                type="text"
                class="form-input"
                placeholder="Enter username"
                name="username"
                ngModel
                required
                #username="ngModel"
            />
 
            <p *ngIf="username.invalid && username.touched">Username required</p>
        </div>
 
        <div class="form-inputs">
            <label for="password" class="form-label">Password:</label>
 
            <input
                id="password"
                type="password"
                name="password"
                class="form-input"
                placeholder="Enter password"
                ngModel
                required
                #password="ngModel"
                [(ngModel)]="model.password"
            />
 
            <p *ngIf="password.invalid && password.touched">password required</p>
        </div>
 
        <div class="form-inputs">
            <label for="passwordvalidate" class="form-label">Password:</label>
 
            <input
                id="confirmpassword"
                type="password"
                name="confirmpassword"
                class="form-input"
                placeholder="Confirm password"
                ngModel
                required
                #password2="ngModel"
                ngValidateEqual="password"
                [(ngModel)]="model.confirmpassword"
            />
 
            <div *ngIf="(password2.dirty || password2.touched) && password2.invalid">
                <p *ngIf="password2.hasError('notEqual') && password.valid">
                   Passwords do not match
               </p>
            </div>
        </div>
 
        <button
           class="form-input-btn"
           type="submit"
           [disabled]="myForm.invalid"
           routerLink="/success"
       >
           Sign Up
       </button>
    </form>
</div>

قالب HTML React

فایل Signup.js حاوی کد زیر است:

import React from "react";
import useForm from "../useForm";
import validate from "../validateData";
import "./Signup.css"
 
const Signup = ({submitForm}) => {
   const {handleChange, values, handleSubmit, errors} = useForm( submitForm, validate);
 
   return (
       <div className="form-content">
           <form className="form" onSubmit={handleSubmit}>
               <h1>Complete the form to join our community!</h1>
 
               <div className="form-inputs">
                   <label htmlFor="username" className="form-label">Username:</label>
 
                   <input
                       id="username"
                       type="text"
                       name="username"
                       className="form-input"
                       placeholder="Enter username"
                       value={values.username}
                       onChange={handleChange}
                   />
 
                   {errors.username && <p>{errors.username}</p>}
               </div>
 
               <div className="form-inputs">

                   <label htmlFor="password" className="form-label"> Password: </label>
 
                   <input
                       id="password"
                       type="password"
                       name="password"
                       className="form-input"
                       placeholder="Enter password"
                       value={values.password}
                       onChange={handleChange}
                   />
 
                   {errors.password && <p>{errors.password}</p>}
               </div>
 
               <div className="form-inputs">
                   <label htmlFor="passwordvalidate" className="form-label"> Password: </label>
 
                   <input
                       id="passwordvalidate"
                       type="password"
                       name="passwordvalidate"
                       className="form-input"
                       placeholder="Confirm password"
                       value={values.passwordvalidate}
                       onChange={handleChange}
                   />
 
                   {errors.passwordvalidate && <p>{errors.passwordvalidate}</p>}
               </div>
 
               <button className="form-input-btn" type="submit">Sign Up</button>
           </form>
       </div>
   )
}

export default Signup;

متوجه خواهید شد که هر دو برنامه از کد HTML اولیه استفاده می کنند، به جز برخی تفاوت های جزئی. به عنوان مثال، برنامه Angular از ویژگی استاندارد “class” برای شناسایی کلاس های CSS استفاده می کند. React از ویژگی «className» سفارشی خود استفاده می کند. React این را به ویژگی استاندارد “class” در خروجی نهایی تبدیل می کند. رابط کاربری نقش مهمی در موفقیت هر برنامه ای دارد. از آنجایی که هر دو برنامه از یک ساختار HTML و نام کلاس ها استفاده می کنند، هر دو برنامه می توانند از یک stylesheet استفاده کنند.

مطلب مرتبط:   شبه کلاس های CSS در مقابل عناصر شبه: یک شیرجه عمیق

تمام ویژگی‌های غیر استاندارد در قالب‌های بالا به اعتبارسنجی مربوط می‌شوند.

ایجاد اعتبارسنجی فرم برای برنامه Angular

برای دسترسی به ویژگی‌های اعتبارسنجی که بخشی از رویکرد الگو محور Angular هستند، باید FormsModule را در فایل app.module.ts وارد کنید.

فایل app.module.ts

import { NgModule } from '@angular/core';

import { FormsModule } from '@angular/forms';

import { BrowserModule } from '@angular/platform-browser';

import { ValidateEqualModule } from 'ng-validate-equal'



import { AppRoutingModule } from './app-routing.module';

import { AppComponent } from './app.component';

import { FormSignupComponent } from './form-signup/form-signup.component';

import { FormSuccessComponent } from './form-success/form-success.component';



@NgModule({
    declarations: [
        AppComponent,
        FormSignupComponent,
        FormSuccessComponent
    ],

    imports: [
        BrowserModule,
        FormsModule,
        ValidateEqualModule,
        AppRoutingModule
    ],

    providers: [],

    bootstrap: [ AppComponent ]
})
 
export class AppModule { }

با وارد کردن FormsModule در فایل بالا، اکنون به طیف وسیعی از ویژگی های اعتبارسنجی مختلف دسترسی دارید. شما باید ویژگی ngModel را به فیلدهای ورودی قالب Angular HTML اضافه کنید. اگر به الگوی Angular بالا نگاه کنید، خواهید دید که هر یک از عناصر ورودی این ویژگی را دارند.

FormsModule و ngModel به توسعه‌دهنده دسترسی به ویژگی‌های اعتبارسنجی مانند valid و invalid را می‌دهند. بخش پاراگراف قالب Angular HTML از ویژگی #username=”ngModel” استفاده می کند. در صورتی که داده های فیلد ورودی نامعتبر باشد و کاربر آن را تغییر داده باشد، اخطاری ایجاد می کند.

در فایل app.module.ts، ValidateEqualModule را نیز خواهید دید که این دو رمز عبور را با هم مقایسه می کند. برای انجام این کار، باید یک شی مدل در فایل form-signup.component.ts ایجاد کنید.

فایل form-signup.component.ts

import { Component, OnInit } from '@angular/core';
 
@Component({
    selector: 'app-form-signup',
    templateUrl: './form-signup.component.html',
    styleUrls: ['./form-signup.component.css']
})
 
export class FormSignupComponent implements OnInit {
    constructor() { }
    ngOnInit(): void {}
    model = {
        password: null,
        confirmpassword: null
    };
}

رمز دوم در قالب Angular HTML از شی مدل موجود در فایل بالا استفاده می کند تا مقدار آن را با رمز عبور اول مقایسه کند.

مطلب مرتبط:   نحوه خواندن و نوشتن فایل های JSON در Node.js

ویژگی غیرفعال شده روی دکمه ارسال تضمین می‌کند که تا زمانی که هر فیلد ورودی حاوی داده‌های معتبر نباشد، غیرفعال می‌ماند. ارسال فرم کاربر را با کمک روتر Angular به یک صفحه موفقیت آمیز می آورد.

فایل app.routing.module.ts

import { NgModule } from '@angular/core';
import { RouterModule, Routes } from '@angular/router';
import { FormSignupComponent } from './form-signup/form-signup.component';
import { FormSuccessComponent } from './form-success/form-success.component';
 
const routes: Routes = [{
    path: '',
    component: FormSignupComponent
},{
    path: 'success',
    component: FormSuccessComponent
}];
 
@NgModule({
    imports: [RouterModule.forRoot(routes)],
    exports: [RouterModule]
})
 
export class AppRoutingModule { }

ماژول مسیریابی بالا شامل دو مسیر است. مسیر اصلی برای فرم و مسیر موفقیت برای مؤلفه موفقیت.

فایل app.component.html

<router-outlet></router-outlet>

خروجی روتر در فایل مؤلفه برنامه در بالا به کاربر این امکان را می دهد که به راحتی بین مؤلفه های فرم ثبت نام و مؤلفه های موفقیت فرم با استفاده از URL ها حرکت کند.

ایجاد اعتبارسنجی فرم برای برنامه React

export default function validateData(values) {
    let errors = {}
 
    if (!values.username.trim()) {
        errors.username = "Username required";
    }
 
    if (!values.password) {
        errors.password = "Password required";
    }
 
    if (!values.passwordvalidate) {
        errors.passwordvalidate = "Password required";
    } else if (values.passwordvalidate !== values.password) {
        errors.passwordvalidate = "Passwords do not match";
    }
 
    return errors;
}

فایل validateData.js حاوی کد بالا است. هر فیلد ورودی در فرم را کنترل می کند تا اطمینان حاصل شود که هر فیلد حاوی داده های معتبر است.

فایل useForm.js

import {useState, useEffect} from 'react';
 
const useForm = (callback, validate) => {
    const [values, setValues] = useState({
        username: '',
        password: '',
        passwordvalidate: ''
    });
 
    const [errors, setErrors] = useState ({});
 
    const [isSubmitting, setIsSubmitting] = useState (false)
 
    const handleChange = e => {
        const {name, value} = e.target;
 
        setValues({
            ...values,

            [name]: value
        });
    }
 
    const handleSubmit = e => {
        e.preventDefault();
        setErrors(validate(values));
        setIsSubmitting(true);
    }

   useEffect(() => {
        if (Object.keys(errors).length === 0 && isSubmitting) {
            callback();
        }
    }, [errors, callback, isSubmitting]);
 
    return { handleChange, values, handleSubmit, errors };
}
 
export default useForm;

قلاب useForm سفارشی بالا تعیین می کند که آیا کاربر فرم را با موفقیت ارسال می کند یا خیر. این رویداد تنها در صورتی رخ می دهد که تمام داده های داخل فرم معتبر باشند.

مطلب مرتبط:   توابع خالص در جاوا اسکریپت و نحوه ایجاد آنها

فایل Form.js

import React from "react";
import Signup from "./Signup";
import Success from "./Success"
import { useState } from "react";
 
const Form = () => {
    const [isSubmitted, setIsSubmitted] = useState(false);
 
    function submitForm() {
        setIsSubmitted(true);
    }
 
    return (
        <div>
            {!isSubmitted ? (<Signup submitForm={submitForm} />) : (<Success />)}
        </div>
    )
}
 
export default Form;

در صورت ارسال فرم، مؤلفه Form در بالا، نما را بین مؤلفه Signup و مؤلفه Success تغییر می دهد.

فایل App.js

import Form from "./components/Form";
 
function App() {
    return (
        <div className="App">
            <Form/>
        </div>
    );
}
 
export default App;

رابط کاربری Angular Application

UI فرمی را با یک ورودی برای نام کاربری و دو ورودی رمز عبور نمایش می دهد.

فرم زاویه ای

هنگامی که فرم حاوی داده های نامعتبر است، صفحات پیام های خطا را نمایش می دهند:

داده های فرم زاویه ای نامعتبر است

هنگامی که فرم حاوی داده های معتبر باشد، کاربر می تواند آن را با موفقیت ارسال کند:

موفقیت فرم زاویه ای

رابط کاربری React Application

فرم واکنش

وقتی فرم حاوی داده های نامعتبر است:

داده‌های نامعتبر فرم واکنش نشان می‌دهد

هنگامی که فرم حاوی داده های معتبر است:

از موفقیت فرم واکنش نشان دهید

شباهت ها و تفاوت های بین React و Angular

فریم ورک های Angular و React به طور قابل ملاحظه ای مشابه هستند و قادر به تولید نتایج یکسان هستند. با این حال، ابزارهایی که ممکن است برای دستیابی به این نتایج استفاده کنید متفاوت خواهد بود. Angular یک پلت فرم توسعه است که دسترسی به ابزارهایی مانند روتر و کتابخانه فرم را فراهم می کند. React برای دستیابی به نتایج مشابه کمی خلاقیت بیشتر از توسعه دهنده نیاز دارد.