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

السؤال

نشر

لدي مشكلة في هذا الكود

import React from 'react';

export default function Counter() {
  const [count, setCount] = useState(1);

  const increment = () => {
    setCount(count + 1);
    console.log(count);
  };
  const decrement = () => {
    setCount(count + 1);
    console.log(count);
  };

  return (
    <div>
      <button onClick={decrement}>-</button>
      {count}
      <button onClick={increment}>+</button>
    </div>
  );
}

مثلا اذا كان state يساوي 4 وقمت بالضغط على زر الزيادة يصبح 5 لكن في تلك الحظة console.log  تعرض 4 عوض الرقم 5 ما المشكل?

Recommended Posts

  • 1
نشر

setCount هي عملية asynchronous يعني تحديث ال state لا يكون لحظي ففي اللحظة التي يشتغل فيها console.log ال state لم يتغير بعد لذلك تحصل على ال state قبل ان يتغير.

فاذا كانت لديك عملية لتقوم بها على ال state المتغير فيمكنك تغيير الكود ليصبح كالتالي

import React from 'react';

export default function Counter() {
  const [count, setCount] = useState(1);

  const increment = () => {
    setCount(currentCount => currentCount + 1);
  };
  const decrement = () => {
    setCount(currentCount => currentCount - 1);
  };

 //عند تحديث الحالة يعاد تشغيل المكون
  useEffect(() => {
      console.log(count)
  }, [count])

  return (
    <div>
      <button onClick={decrement}>-</button>
      {count}
      <button onClick={increment}>+</button>
    </div>
  );
}

هكذا ستحصل على ال state بعد تحديثه داءما ويمكنك اجراء العملية التي تريدها على اخر تحديث له

 

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

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

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

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...