无法从React-Native Expo的资产文件夹访问文件

问题描述 投票:0回答:1

我有一个从 csv 读取数据的应用程序。我使用文件系统和 Expo Asset 来访问我的文件。在开发过程中,我使用 Google 的 Project IDX 来编码此应用程序并使用此应用程序的网络版本进行调试。另外,在开发过程中,没有错误,在启动展会时可以读取所有 csv 文件。但是,当我尝试使用 eas 构建应用程序时,有点找不到 csv 文件,因为它总是显示“正在加载...”。我的 csv 文件位于 expo 的 asset 文件夹中(assets/jadwal_sholat.csv),index.tsx 位于 app 文件夹中。我已经做了USB调试,log.txt中没有错误。有什么解决办法吗?我把我的代码放在下面

interface ParsedSholatTimes {
    Tanggal: string;
    Subuh: string;
    Dzuhur: string;
    Ashar: string;
    Maghrib: string;
    Isya: string;
}

useEffect(() => {
        const fetchCsvData = async () => {
            try {
                const asset: Asset = Asset.fromModule(require('../assets/jadwal_sholat.csv'));
                await asset.downloadAsync();
                const csvFile: string = await FileSystem.readAsStringAsync(asset.localUri || '');

                Papa.parse<ParsedSholatTimes>(csvFile, {
                    header: true,
                    complete: (results: ParseResult<ParsedSholatTimes>) => {
                        const now = new Date();
                        const formattedToday = `${now.getDate()}/${now.getMonth() + 1}/${now.getFullYear()}`;

                        const todayTimes = results.data.find((row: ParsedSholatTimes) => {
                            const [day, month, year] = row.Tanggal.split('/').map(Number);
                            const csvDate = new Date(year, month - 1, day);

                            return (
                                csvDate.getDate() === now.getDate() &&
                                csvDate.getMonth() === now.getMonth() &&
                                csvDate.getFullYear() === now.getFullYear()
                            );
                        });

                        if (todayTimes) {
                            setSholatTimes(todayTimes);
                        } else {
                            console.log('No times found for today');
                        }
                    },
                });
            } catch (error) {
                console.error('Error fetching or parsing CSV:', error);
            }
        };
{prayerTimes.map((prayer: PrayerTime, index: number) => {
                    const borderColor = tw`border-${prayer.color}`;
                    const bgColor = tw`bg-${prayer.color}`;
                    return (
                        <View key={prayer.name} style={[tw`w-full bg-neutral-100 p-3 rounded-xl mb-3`, borderColor]}>
                            <View style={tw`flex-row items-center justify-between`}>
                                <View style={tw`flex-row items-center`}>
                                    <View style={[tw`rounded-full px-5 py-3 mr-2 w-44 `, bgColor]}>
                                        <Text style={tw`text-3xl font-bold text-white text-center`}>{prayer.name}</Text>
                                    </View>
                                </View>
                                <Text style={tw`text-4xl font-bold`}>{prayer.time || 'Loading...'}</Text>
                            </View>
                        </View>
                    );
                })}

我已经尝试使用直接路径使用

require()
,但它也不起作用。我已经在进行USB调试并且log.txt中没有错误。

react-native csv expo
1个回答
0
投票

我通过 Junek 的回答中建议的解决方案解决了该问题:在此处输入链接描述 提示是将 csv 添加到世博资源支持的文件类型中: 编辑metro.config.js并添加csv类型如下

const { getDefaultConfig } = require('expo/metro-config');

/** @type {import('expo/metro-config').MetroConfig} */
const config = getDefaultConfig(__dirname);
config.resolver.assetExts.push('csv');

module.exports = config;

© www.soinside.com 2019 - 2024. All rights reserved.