ESC را فشار دهید تا بسته شود

۳ نکته برای بهبود کد در React

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

پس وقتی نیاز بازار به این کتابخونه بالاست طبیعتا نیروی بیشتری هم به این سمت سرازیر میشه و راه شما پیشرفت و یادگیری عمیق تر react هست تا شمارو از بقیه متمایز کنه

توی این پست قراره ۳ نکته رو بگم که بتونین کدهای بهتری توی react بنویسید و امیدوارم براتون مفید باشه و ازش استفاده کنین.

۱- توابع کمتری بنویسید!

توی کار با فرم ها که فیلدهای زیادی ممکنه از کاربر بگیریم و دیتاها رو توش ذخیره کنیم ممکنه بخوایم برای هر فیلد یا ورودی یک تابع بنویسیم تا تغییرات رو توش ذخیره کنیم و اون رو به سرور ارسال کنیم یا هرکار دیگه ای که قراره با دیتاهای توی فرم بکنیم

اما این کد اصولا چطوریه؟

کد بد

import { useState } from "react";

const App = () => {
	const [user, setUser] = useState({
	  name: "",
	  family: "",
	  job: ""
	});
  
	// handler for name
	const handleName = (e) => {
	  setUser((prev) => ({
		...prev,
		name: e.target.value
	  }));
	};
  
	// handler for family
	const handleFamily = (e) => {
	  setUser((prev) => ({
		...prev,
		family: e.target.value
	  }));
	};
  
	// handler for job
	const handleJob = (e) => {
	  setUser((prev) => ({
		...prev,
		job: e.target.value
	  }));
	};
  
	return (
	  <div>
		<input value={user.name} onChange={handleName} />
		<input value={user.family} onChange={handleFamily} />
		<input value={user.job} onChange={handleJob} />
	  </div>
	);
  }
  export default App

کد بهتر

import { useState } from "react";

const App = () => {
	const [user, setUser] = useState({
	  name: "",
	  family: "",
	  job: ""
	});
  
	const handleInput = (field) => {
	  return (e) => {
		setUser((prev) => ({
		  ...prev,
		  [field]: e.target.value
		}));
	  };
	};
  
	return (
	  <div>
		<input value={user.name} onChange={handleInput("name")} />
		<input value={user.family} onChange={handleInput("family")} />
		<input value={user.job} onChange={handleInput("job")} />
	  </div>
	);
  }

  export default App

۲- از آبجکت ها بجای شرط استفاده کنید!

فرض کنیم کلی متغیر داریم و میخوایم بر اساس اون متغیرها شرط های جدیدی رو اجرا کنیم و یا کمپوننت های مختلفی رو نشون بدیم که خب توی ری اکت خیلی استفاده میکنیم و خب راه حل اولی هم که به ذهنمون میرسه یا نوشتن switch-case یا نوشتن کلی if هستش که نمونه زیر یکی از اوناس

کد بد

// EXAMPLE : CHILD
// i have Form component for generate multi form
const Form = ({type}) => {
    let FormComponent = AllForm;
  
    if (type === 'monthly') {
        FormComponent = MonthlyForm
    }
  
    if (type === 'daily') {
        FormComponent = DailyForm
    }
  
    if (type === 'year') {
        FormComponent = YearForm
    }
  
    return (
      <div>
        <FormComponent />
      </div>
    )
}

export default Form;
//EXAMPLE : PARENT
import Form from "./Form";

const App = () => {
  
	return (
	  <div>
		{/* Generate From from type */}
		<Form type="monthly"/>
	  </div>
	);
  }

  export default App

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

کد بهتر

const Form_Types = {
    'monthly': MonthlyForm,
    'daily': DailyForm,
    'year': YearForm,
    'all': AllForm,
  }
  
const GoodForm = ({type}) => {
    let FormComponent = Form_Types[type]
  
    return (
      <div>
        <FormComponent />
      </div>
    )
}

export default GoodForm

یادمون نره تمام کامپوننت ها باید از قبل تعریف شده باشن وگرنه موقع اجرا کردن به اررور میخورین توی کنسول

۳- متغیرهای مستقل را خارج از لایف سایکل React قرار بدین!

توی react هر کامپونتت یک lifecycle یا چرخه حیات داره! که ما توی این کامپوننت ها میتونیم کلی متغیر و فانکشن و هوک های مختلف استفاده کنیم

این چیزی که میگم قانون و وحی منزل نیست صرفا برای خوانایی بهتره

خب بهتره توی یک کامپونتت متغیرهای که به چرخه حیات کامپونتت ما مربوط نیستن و نیازی نیست بر اساس اونا render یا re-render یا هر اتفاقی بیوفته، خارج از تابع کامپونتت ما تعریف بشن. که بریم با مثال ببینیم

کد بد

const App = () => {
const name = "Ali"

  return(
	<h1>Hello {name}</h1>
  )
}
export default App

کد بهتر

//I define the NAME outside component
const NAME = "Ali"

const App = () => {
	
	  return(
		<h1>Hello {name}</h1>
	  )
}
export default App

اگر از ant design استفاده کرده باشین خیلی از این مدل برای کامپوننت هاش استفاده کرده که دیتاها و متغیرها رو بیرون تعریف میکنه و خود کامپونتت و هوک های مربوطه توی فانکشن اصلی ما.

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *