Скопируйте локальные файлы в папку документов

к сожалению, 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} и динамически загружать изображения.

На самом деле этот код не выдает ошибок и не создает файл нулевой длины в месте назначения. Любая подсказка?


person Marco Jr    schedule 08.11.2018    source источник


Ответы (1)


Ну, вы не можете динамически изменить строку в запросе, но вы можете динамически изменить источник изображения, я считаю, что это будет более простым обходным решением для вашей ситуации. Например, вы можете настроить селектор требований для чего-то вроде этого:

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} />
person Danilo    schedule 08.11.2018