No recibo ningún error, pero cuando ejecuto la aplicación React Native, el result seguirá siendo false . Cuando hago clic en Generate Number , undefined se imprimirá en la consola, pero aparecerá un número aleatorio debajo de TextInput y cuando vuelva a hacer clic, aparecerá un nuevo número, pero el número anterior se imprimirá en la consola. Este es mi código:
import React, { useState } from 'react'; import { View, Text, TextInput, Button, StyleSheet } from 'react-native'; const App = () => { const [number, setNumber] = useState(); const [result, setResult] = useState(false); const styles = StyleSheet.create({ ... }); const guess = (num) => { if (num === number) { setResult(true); } else { setResult(false); } console.log(result); }; const genNumber = () => { setNumber(Math.floor(Math.random() * (100 - 1) + 1)); console.log(number); }; return ( <View style={styles.view}> <Button onPress={() => genNumber()} title="Generate Number" /> <TextInput style={styles.text} onChangeText={(text) => guess(text)} placeholder="Enter your guess" /> <Text style={styles.text}>{number}</Text> </View> ); }; export default App;Probablemente sea un error de alcance, pero no estoy seguro.
useState es asíncrono, como se menciona en el comentario, por lo que puede suscribirse a cambios de estado con useEffect o puede hacer esto:
const genNumber = async () => { await setNumber(Math.floor(Math.random() * (100 - 1) + 1)); console.log(number); };