
میشه گفت که 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 استفاده کرده باشین خیلی از این مدل برای کامپوننت هاش استفاده کرده که دیتاها و متغیرها رو بیرون تعریف میکنه و خود کامپونتت و هوک های مربوطه توی فانکشن اصلی ما.
دیدگاهتان را بنویسید