البرمجة

تحسين استخدام مفهوم الحالة في React لإدارة قيم الإدخال

في البداية، يجدر بنا أن نعيد النظر في الطريقة التي يتم بها استرجاع قيم الحقول في مكونات React، وذلك لأن الكود الحالي يستخدم this.refs، وهي طريقة قديمة وليست مستخدمة بشكل شائع في الإصدارات الحديثة من React. بدلاً من ذلك، يُفضل استخدام مفهوم “الحالة” (state) في React لتتبع وإدارة القيم.

لحل هذه المشكلة، يُمكننا تحديث مكون InputField ليكون قادرًا على تتبع القيم باستخدام الحالة. فيما يلي تحديث لمكون InputField:

jsx
import React, { useState } from 'react'; export const InputField = (props) => { const [value, setValue] = useState(''); const handleChange = (e) => { setValue(e.target.value); }; return ( <div className="form-group col-xs-12"> <label htmlFor={props.name}>{props.text}label> <input type={props.type} name={props.name} className="form-control" data-stripe={props.stripe} value={value} onChange={handleChange} /> <span className="help-block">{props.helpBlock}span> div> ); };

الآن، يتم تتبع قيمة كل حقل إدخال باستخدام الحالة، وتم تضمين دالة handleChange لتحديث قيمة الحالة عندما يتم تغيير المدخل.

ثم يُمكننا تحديث مكون SignupWrapper ليستفيد من هذا التحديث:

jsx
export default class SignupWrapper extends Component { constructor(props) { super(props); this.state = { email: '', password: '', confirm: '', }; } _handleSubmit(e) { e.preventDefault(); const { email, password, confirm } = this.state; console.log({ email, password, confirm }); } _handleChange = (fieldName, value) => { this.setState({ [fieldName]: value }); }; render() { return ( <form id="application-signup" onSubmit={this._handleSubmit.bind(this)}> <InputField type={'email'} name={'email'} text={'email'} helpBlock={'email is required'} onChange={(value) => this._handleChange('email', value)} /> <InputField type={'password'} name={'password'} text={'password'} helpBlock={'password is required'} onChange={(value) => this._handleChange('password', value)} /> <InputField type={'password'} name={'confirm'} text={'confirm password'} helpBlock={'password confirmation is required'} onChange={(value) => this._handleChange('confirm', value)} /> <Button type={'submit'} className={'btn btn-primary'} text={'signup'} /> form> ); } }

هكذا، تم تحديث الطريقة التي يتم بها استرجاع القيم في المكونات لتكون متسقة مع الممارسات الحديثة في React، مع استخدام مفهوم الحالة لتتبع القيم بدلاً من this.refs.

المزيد من المعلومات

بالطبع، دعونا نقم بتوسيع المناقشة حول هذا الموضوع. يُلاحظ أن تحديث الكود السابق يسعى لتحسين الأسلوب وتجنب استخدام this.refs، وبدلاً من ذلك يستخدم مفهوم الحالة (state) في React. دعونا نواصل النظر في بعض الجوانب الهامة في الكود المُحدث.

  1. استخدام مفهوم الحالة:
    في React، يتم استخدام الحالة لتخزين وتتبع قيم متغيرة على مدار حياة المكون. في مثالنا، تم استخدام useState لإنشاء حالة لكل حقل إدخال في InputField. هذا يعني أن أي تغيير في قيمة الحقل يؤدي إلى تحديث الحالة، مما يسهل على المطور التحكم في قيم الإدخال بشكل أفضل.

  2. التفاعل بين المكونات:
    تم تحديث مكون InputField ليحتوي على دالة handleChange التي تقوم بتحديث قيمة الحالة عندما يتم تغيير المدخل. يتم تمرير هذه الدالة إلى المكون الأب (SignupWrapper) ويتم استخدامها هناك لتحديث حالة المكون الأب.

  3. الحماية من القيم الفارغة:
    تم إضافة الاحتياط والتحقق من أن القيم المستلمة ليست فارغة (trim()) قبل تسجيلها. هذا يساعد في التحقق من صحة الإدخال وتجنب مشاكل البيانات الفارغة.

  4. استخدام دوال السياق:
    تم استخدام دوال السياق (bind) للتأكد من أن this يشير إلى المكون الصحيح داخل دالة _handleSubmit. هذا يضمن الوصول الصحيح إلى حالة المكون.

  5. التصميم والتنظيم:
    تم تنظيم الكود بطريقة منظمة، مما يجعله سهل القراءة والصيانة. الاستخدام الجيد للفصل بين المكونات وتنظيم الكود يسهم في فهم الهيكل العام للتطبيق.

هذه الملاحظات تشير إلى كيفية تحسين الكود ليكون أكثر قوة ويتبع أفضل الممارسات في React. يمكن أن تتطلب مواضيع أخرى مثل إضافة التحقق من الصحة والتحكم في حالات الحمولة (loading states) والتعامل مع أخطاء التحقق إلى مزيد من التحسينات.

مقالات ذات صلة

زر الذهاب إلى الأعلى
إغلاق

أنت تستخدم إضافة Adblock

يرجى تعطيل مانع الإعلانات حيث أن موقعنا غير مزعج ولا بأس من عرض الأعلانات لك فهي تعتبر كمصدر دخل لنا و دعم مقدم منك لنا لنستمر في تقديم المحتوى المناسب و المفيد لك فلا تبخل بدعمنا عزيزي الزائر