as for someone new to react native, how can I get the updated value from usestate and apply it to another function? for example here is my code:
function HomeScreen({ navigation }) {
return (
<View style={styles.container}>
<TouchableOpacity
style={styles.scanButton}
title="Scan"
onPress={() => navigation.navigate("BarcodeScanner")}
>
<Text style={styles.scanText}>Scan</Text>
</TouchableOpacity>
<TextInput
style={styles.input}
placeholder="Barcode Value ... "
// i want to put the updated value here in "value"
value=""
/>
</View>
);
}
function BarcodeScanner() {
const [barcodeData, setBarcodeData] = useState();
const handleBarCodeScanned = ({ data }) => {
setScanned(true);
Alert.alert("Result", `Barcode data ${data} has been scanned!`, [
{
text: "Cancle",
onPress: () => console.log("Cancle pressed"),
},
{
text: "Apply",
onPress: () => setBarcodeData(data),
},
]);
};
I have tried for hours but I didn't come to a solution, any suggestions?
CodePudding user response:
We could pass the barcodeData back to the HomeScreen using route params. Actually, from the code that you have provided, we could remove the state in BarcodeScanner and pass data in the handleBarCodeScanned function directly.
This could be implemented as follows. I assume that HomeScreen is a Screen defined in a navigator.
function BarcodeScanner() {
const navigation = useNavigation()
Alert.alert("Result", `Barcode data ${data} has been scanned!`, [
{
text: "Cancle",
onPress: () => console.log("Cancle pressed"),
},
{
text: "Apply",
onPress: () => navigation.navigate("HomeScreen", {data: data}),
},
]);
};
In Homescreen, we handle the state.
function HomeScreen({ navigation, route }) {
const [barcodeData, setBarcodeData] = useState();
useEffect(() => {
if (route.params) {
setBarcodeData(route.params.data)
}
}, [route.params])
return (
<View style={styles.container}>
<TouchableOpacity
style={styles.scanButton}
title="Scan"
onPress={() => navigation.navigate("BarcodeScanner")}
>
<Text style={styles.scanText}>Scan</Text>
</TouchableOpacity>
<TextInput
style={styles.input}
placeholder="Barcode Value ... "
value={barcodeData}
/>
</View>
);
}
