Odium
Odium

Reputation: 87

React Native - useState not updating immediatly

I'm trying to update my state when onLongPress triggered.
I'm printing the result right after the setState but it shows nothing (on the first press) Code:

const [pressedImagesm setPressedImages] = useState([]);
...
onLongPress={() => {
          setPressedImages(oldArray => [...oldArray, { [index]: true }]);
          console.log(pressedImages);
}}

Upvotes: 1

Views: 838

Answers (2)

Chaurasia
Chaurasia

Reputation: 496

try this:

const [pressedImages, setPressedImages] = useState([]);
...
onLongPress={() => {
   const cloneArray = [...pressedImages];
   cloneArray.push({ [index]: true });
   setPressedImages(cloneArray);
}}

console.log('Updated pressedImages:', pressedImages);

Upvotes: 0

Donut
Donut

Reputation: 112895

That's because setPressedImages does not update the state object (pressedImages) directly. Instead, it adds this update to a queue, and the updated state is reflected on the next render of your component.

This is a pretty common React question - there's a lot of helpful content out there that explains it in more detail (such as this article or this SO question).

Upvotes: 3

Related Questions