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

عند تغيير state يطرأ عنه عرض لل state قبل ان يتغير

Rayden Storm

السؤال

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

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.

  • إعلانات

  • تابعنا على



×
×
  • أضف...