所以我試著將 const 變數從一個檔案傳輸到另一個檔案。由於某種原因,我無法訪問它,並且它不允許我在文字檔案中顯示它。下面分別是 homepage.js 程式碼和 pay.js 檔案。我正在嘗試將 displayedAmount 變數從主頁文件傳輸到付費文件,然後將其顯示在文字元素中。但是,當我這樣做時,我收到此錯誤“錯誤:文字字串必須在組件內呈現。”
import { StyleSheet, Text, View, Image, Dimensions, TouchableOpacity, Alert, Animated } from 'react-native'; import { FontAwesome5 } from '@expo/vector-icons'; import React, { useState, useEffect, useRef } from 'react'; import { useNavigation } from '@react-navigation/native'; import pay from './pay'; const homepage = ({ route, navigation }) => { const [selectedAmount, setSelectedAmount] = useState("0"); const [displayedAmount, setDisplayedAmount] = useState("0"); const fadeAnim = new Animated.Value(0); // initial opacity const screenWidth = Dimensions.get('window').width; const buttonWidth = screenWidth * 0.45; const spaceBetweenNumbers = 100; useEffect(() => { Animated.timing( fadeAnim, { toValue: 1, duration: 1000, useNativeDriver: true, } ).start(); if (selectedAmount.includes('.')) { const [whole, decimal] = selectedAmount.split('.'); setDisplayedAmount(`${isNaN(parseInt(whole)) ? "0" : parseInt(whole).toLocaleString()}.${decimal}`); } else { setDisplayedAmount(isNaN(parseInt(selectedAmount)) ? "0" : parseInt(selectedAmount).toLocaleString()); } Animated.timing( fadeAnim, { toValue: 0, duration: 1000, useNativeDriver: true, } ).start(); }, [selectedAmount]); const handleNumberPress = (number) => { if (selectedAmount.length < 5) { setSelectedAmount(prevState => prevState === "0" ? String(number) : prevState + number); } }; const handleDecimalPress = () => { if (!selectedAmount.includes(".") && selectedAmount.length < 4) { setSelectedAmount(prevState => prevState + "."); } }; const handleDeletePress = () => { setSelectedAmount(prevState => prevState.slice(0, -1) || "0"); }; const goTopay = () => { navigation.navigate('Pay', { displayedAmount }); // passing displayedAmount as a parameter };
import { StyleSheet, Text, TouchableOpacity, View } from 'react-native'; import React from 'react'; import { Feather } from '@expo/vector-icons'; import { createStackNavigator } from '@react-navigation/stack'; import homepage from './homepage'; import displayedAmount from './homepage' const Pay = ({ route, navigation }) => { const { displayedAmount } = route.params; const goToHome = () => { navigation.navigate('Homepage'); // The corrected screen name should be 'Homepage' instead of 'homepage' }; return ( <View> <TouchableOpacity onPress={goToHome}> <Feather name="x" color="black" size={30} style={styles.cross} /> </TouchableOpacity> <View style={{ borderBottomColor: 'grey', borderBottomWidth: StyleSheet.hairlineWidth, marginTop: 95, }} /> <Text style={styles.to}>To</Text> <View style={{ borderBottomColor: 'grey', borderBottomWidth: StyleSheet.hairlineWidth, marginTop: 55, }} /> <Text style={styles.for}>For</Text> <View style={{ borderBottomColor: 'grey', borderBottomWidth: StyleSheet.hairlineWidth, marginTop: 55, }} /> <Text>{displayedAmount}</Text> {/* Display the displayedAmount */} </View> ); }; export default Pay; const styles = StyleSheet.create({ cross: { position: 'absolute', left: 15, top: 50, }, to:{ fontFamily: 'CashMarketMedium', fontSize: 16, position: 'absolute', left: 19, top: 110, }, for:{ fontFamily: 'CashMarketMedium', fontSize: 16, position: 'absolute', left: 19, top: 165, }, line: { position: 'absolute', left: 15, top: 50 + 36 + 4, // To position the line below the 'x' icon, we add its size (36) and some margin (4) width: '100%', height: 1, backgroundColor: 'grey', }, });
幾個選項:
const
中的值。通常將常數分開,這樣,如果兩個元件需要相同的常數,而其中一個元件需要另一個元件,則不會建立 require 迴圈。僅供參考,導出常數命名為導出 VS 預設導出。所以需要用大括號導入。