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

السؤال

نشر

في مكون React الخاص بي ، لدي زر مخصص لإرسال بعض البيانات عبر axios عند النقر فوقه. أحتاج إلى أن يحدث ذلك فقط في المرة الأولى ، أي تعطيل الزر بعد استخدامه لأول مرة.

export default function Send() {

const handleSubmit = () => {
    axios.post(...).then(res => {...}).catch(err => ...)
}

    return (
        <div>
        ....
           <button onClick={handleSubmit}>send</button>
        </div>
    )
}

 

Recommended Posts

  • 0
نشر

لديك عدة طرق أرفق لك منها إثنتين 

1- بإستخدام ال state 

export default function Send() {
  const[buttonDisabled, setButtonDisabled] = useState(false);  // الخطوة 1
  const handleSubmit = () => {
    setButtonDisabled(true) // الخطوة 2
      axios.post(...).then(res => {...}).catch(err => ...)
  }
  
      return (
          <div>
         // .... الخطوة 3
             <button disabled={buttonDisabled}  onClick={handleSubmit}>send</button> 
          </div>
      )
  }

2- بإستخدام ال refs 

export default function Send() {
const buttonRef = useRef();  // الخطوة رقم 1
const handleSubmit = () => {
  // الخطوة رقم 2
   if(buttonRef.current){
    buttonRef.current.setAttribute("disabled", "disabled");
  }
    axios.post(...).then(res => {...}).catch(err => ...)
}

    return (
        <div>
        ....// الخطوة رقم 3
           <button ref={buttonRef} onClick={handleSubmit}>send</button>
        </div>
    )
}

 

  • 0
نشر (معدل)

استخدم الكود السابق ويفضل عدم استخدام ref لأنه يقراء DOM مباشرةً

إذا أردت إيقاف الزر بعد الضغط لأول مرة فقط فيمكنك استخدام كود عبدالله الكود رقم واحد

اما إذا أردت إعادة تشغيل الزر إذا لم يتم إرسال البيانات بنجاح لكي يحاول مرة أخرى فاستخدم هذا الكود

export default function Send() {
  const[buttonDisabled, setButtonDisabled] = useState(false);  // الخطوة 1
  const handleSubmit = () => {
    setButtonDisabled(true) // الخطوة 2
      axios.post(...).then(res => {...}).catch(err => {setButtonDisabled(false)})
  }
  
      return (
          <div>
         // .... الخطوة 4
             <button disabled={buttonDisabled}  onClick={handleSubmit}>send</button> 
          </div>
      )
  }

 

 

 

تم التعديل في بواسطة عبدالمجيد الجرادي

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...