اذهب إلى المحتوى

Chihab Hedidi

الأعضاء
  • المساهمات

    601
  • تاريخ الانضمام

  • تاريخ آخر زيارة

إجابات الأسئلة

  1. إجابة Chihab Hedidi سؤال في هل تنفع إستضافة Hostinger لموقع من أجل إستخدام digital marketing كانت الإجابة المقبولة   
    لا يوجد ضرورة لاختيار باقة معينة من هوستنجر من أجل جعل الموقع جاهزا للتسويق الرقمي، و أكيد يمكن لأي موقع على هوستنجر أن يكون قابلا لعمليات التسويق الرقمي، و الأمر هنا ليس له علاقة بالإستضافة بل يكون بالتعديل على الكود الخاص بالموقع عن طريق إضافة أكواد التتبع الخاصة بالمواقع المعروفة.
  2. إجابة Chihab Hedidi سؤال في إشكالية معينة في طريقة عمل التعابير النمطية في جافا سكريبت كانت الإجابة المقبولة   
    (\D+.*) يتحقق لأنو القيمة تحتوي على حروف وليس شرط أن تكون الحروف في البداية، لكن إذا كنت تريد أن تضمن أنه لا يجب  أن تكون الأرقام في البداية يمكنك تغييره هكذا:
    /^[^0-9].*@(\D+.*)\.(\w{2,})/i أو تضيف ^ في النمط الخاص بك لأن هذا الرمز يشير إلى البداية، أي بهذه الطريقة نضمن أن البداية تكون حرف:
    /^(\D+.*).*@(\D+.*)\.(\w{2,})/i  
  3. إجابة Chihab Hedidi سؤال في كيفية حذف المسافة في كلمة بلغة البيثون كانت الإجابة المقبولة   
    لا يوجد دالة تقوم بهذا الأمر مباشرة و لكن يمكن إستغلال الدوال الأخرى لتنفيذ هذا الأمر، فمثلا يمكنك استخدام الدالة replace فهذه الدالة تقوم بتغيير الجزء المحدد من النص بقيمة أخرى، لذا يمكنك استخدامها لإزالة المسافات من النص، و هذا مثال على كيفية استخدامها:
    def remove_spaces(text):     return text.replace(" ", "") text = "the king is sleeping" result = remove_spaces(text) print(result)  # ستطبع "thekingissleeping" يمكنك أيضا استخدام الدالة join لدمج الكلمات دون مسافات بينها بالطريقة التالية:
    def remove_spaces(text):     return ''.join(text.split()) text = "the king is sleeping" result = remove_spaces(text) print(result)  # ستطبع "thekingissleeping" هنا split تقوم بتقسيم النص إلى كلمات باستخدام المسافات كمحدد، ثم join تقوم بدمج الكلمات بدون مسافات بينها.
  4. إجابة Chihab Hedidi سؤال في أيهمها أفضل كقيمة أولية للحالة State في رياكت: null أو undefined أو "" ؟ كانت الإجابة المقبولة   
    اختيار القيمة يعتمد على السياق الخاص بتطبيقك ومتطلباته null يستخدم عادة عندما يكون الحالة غير معرفة أو غير محددة، مثلا إذا كنت تتوقع تحميل بيانات من الخادم أو إذا كانت القيمة تحتاج إلى حالة ابتدائية لا تشير إلى شيء معين، فإن null  هو الخيار الأفضل.
    const [userData, setUserData] = useState(null); useEffect(() => { // يتم تحميل البيانات من الخادم fetchData() .then((data) => setUserData(data)) .catch((error) => console.error("حدث خطأ في تحميل البيانات", error)); }, []); "" أو السلسلة الفارغة يمكن استخدامها إذا كانت الحالة تمثل سلسلة نصية والقيمة الابتدائية هي سلسلة فارغة، هذا يمكن أن يكون مناسبا عند بدء العمل بقيمة نصية تكون فارغة ويتم تحديثها فيما بعد.
    const [inputText, setInputText] = useState(""); const handleInputChange = (event) => { // يتم تحديث قيمة النص عند تغيير المدخلات setInputText(event.target.value); }; return ( <input type="text" value={inputText} onChange={handleInputChange} placeholder="أدخل نص هنا" /> );  
  5. إجابة Chihab Hedidi سؤال في تعديل البيانات الشخصية مع عرض البيانات القديمة كانت الإجابة المقبولة   
    لحل المشكلة يمكنك استخدام useEffect ، حيث نستعمله عندما نريد إجراء تعديل على حالة ال component بعد ال render و هذا الكود بعد التحديث:
    import React, { useState, useEffect } from 'react'; import axios from 'axios'; import { useNavigate } from 'react-router-dom'; import HeaderProfile from './HeaderProfile'; import Alert from './Alert'; function PhotoProfile({ profile }) {   const user = JSON.parse(localStorage.getItem("user"));   let profilePhoto = profile?.avatar ? require(`../../assets/profile/${profile.avatar}`) : avatar;   const [profileAvatar, setProfileAvatar] = useState(null);   const [profileImage, setProfileImage] = useState(profilePhoto);   const [data, setData] = useState([]);   const [name, setName] = useState(profile.name || "");   const [bio, setBio] = useState(profile.bio || "");   const [status, setStatus] = useState(profile.status || "");   const [error, setError] = useState("");   const navigate = useNavigate();   useEffect(() => {     // تحديث معلومات البروفايل     let profilePhoto = profile?.avatar ? require(`../../assets/profile/${profile.avatar}`) : avatar;     setProfileImage(profilePhoto);     setName(profile.name || "");     setBio(profile.bio || "");     setStatus(profile.status || "");   }, [profile]);   const handleFileChange = (e) => {     if (e.target.files && e.target.files[0]) {       setProfileImage(URL.createObjectURL(e.target.files[0]));       setProfileAvatar(e.target.files[0]);     }   };   const handleSave = (e) => {     e.preventDefault();     const formData = new FormData();     formData.append('name', name);     formData.append('bio', bio);     formData.append('status', status);     if (profileAvatar) {       formData.append('avatar', profileAvatar, profileAvatar?.name);     }     axios       .post("/api/users/profile", formData, {         headers: {           "Content-Type": "multipart/form-data",           "x-auth-token": user.data?.token,         },       })       .then((res) => {         setData(res.data);         navigate('/');       })       .catch((error) => setError(error.response.data.msg));   };   return (     <div className="photo-profile">       <HeaderProfile         title="Public profile"         paragraphe="Add information about yourself."       />       <div className="photo-profile-img">         <img alt="" src={profileImage} />       </div>       <form         encType="multipart/form-data"         className='form-container'         onSubmit={handleSave}       >         {error && <Alert error={error} />}         <input           className="photo-profile-input"           type="file"           name="avatar"           accept="image/*"           onChange={handleFileChange}         />         <input           type="text"           className="profile-iput-info"           placeholder="name"           value={name}           name="name"           onChange={(e) => setName(e.target.value)}           required         />         <input           type="text"           className="profile-iput-info"           placeholder="bio"           value={bio}           name="bio"           onChange={(e) => setBio(e.target.value)}           required         />         <input           type="text"           className="profile-iput-info"           placeholder="status"           value={status}           name="status"           onChange={(e) => setStatus(e.target.value)}           required         />         <button className="submit" type="submit">           Save         </button>       </form>     </div>   ); } export default PhotoProfile; يمكنك الإطلاع اكثر على هذه العناصر من خلال المقالات التالية:
     
×
×
  • أضف...