0

遗憾的是,RN 无法将字符串变量用作 require() 的参数。因此,如果您需要创建一个简单的 3x3 记忆游戏,其中每个方块都需要从本地文件夹渲染不同的图像:算了吧。

我正在尝试为此创建一个解决方法:将文件从我的 src/assets/*.** 复制到文档文件夹。但它不起作用。

我的应用程序的结构是这样的:

/root folder
+---/android
+---/ios
+---/src
    +---/assets
           +----/x.png
           +----/y.png
    +---/index.js

在 index.js 我有这行代码:

 RNFetchBlob.fs.cp("bundle-assets://../../assets/x.png", 
 RNFetchBlob.fs.dirs.DocumentDir +'/x.png')
            .then(() => { alert('done') })
            .catch((e) => { alert(e) })

我正在使用 react-native-fetch-blob 复制文件,因此复制后我可以使用 source={ uri: myFile } 并动态加载图像。

实际上,此代码不会引发错误并在目标上创建零长度文件。有什么线索吗?

4

1 回答 1

0

好吧,您不能动态更改 require 中的字符串,但您可以动态更改图像的来源,我相信这对于您的情况来说是一个更简单的解决方法。例如,您可以为以下内容设置 requires 选择器:

let randomNumber = Math.floor((Math.random() * 10)/2);
let imageSource = null;
switch (randomNumber) {
    case 0:
        imageSource = require('./image1.jpg');
        break;
    case 1:
        imageSource = require('./image2.jpg');
        break;
    case 2:
        imageSource = require('./image3.jpg');
        break;
    case 3:
        imageSource = require('./image4.jpg');
        break;
    default:
        imageSource = require('./image5.jpg');
        break;
}

然后在您的图像中使用该 imageSource:

<Image source={imageSource} />
于 2018-11-08T16:55:56.687 回答