Как уже упоминалось ранее, API-интерфейсы FileSystem и File , а также API FileWriter могут использоваться для чтения и записи файлов из контекст вкладки / окна браузера на клиентскую машину.
Существует несколько вещей, относящихся к API-интерфейсам FileSystem и FileWriter, о которых вы должны знать, некоторые из которых были упомянуты, но заслуживают повторения:
. Вот простые примеры того, как API-интерфейсы используются, прямо или косвенно, в тандеме для выполнения следующих действий:
Запись файла:
bakedGoods.set({
data: [{key: "testFile", value: "Hello world!", dataFormat: "text/plain"}],
storageTypes: ["fileSystem"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(byStorageTypeStoredItemRangeDataObj, byStorageTypeErrorObj){}
});
Чтение файла:
bakedGoods.get({
data: ["testFile"],
storageTypes: ["fileSystem"],
options: {fileSystem:{storageType: Window.PERSISTENT}},
complete: function(resultDataObj, byStorageTypeErrorObj){}
});
Использование необработанного файла, FileWriter и API FileSystem
Запись файла:
function onQuotaRequestSuccess(grantedQuota)
{
function saveFile(directoryEntry)
{
function createFileWriter(fileEntry)
{
function write(fileWriter)
{
var dataBlob = new Blob(["Hello world!"], {type: "text/plain"});
fileWriter.write(dataBlob);
}
fileEntry.createWriter(write);
}
directoryEntry.getFile(
"testFile",
{create: true, exclusive: true},
createFileWriter
);
}
requestFileSystem(Window.PERSISTENT, grantedQuota, saveFile);
}
var desiredQuota = 1024 * 1024 * 1024;
var quotaManagementObj = navigator.webkitPersistentStorage;
quotaManagementObj.requestQuota(desiredQuota, onQuotaRequestSuccess);
Файл чтения:
function onQuotaRequestSuccess(grantedQuota)
{
function getfile(directoryEntry)
{
function readFile(fileEntry)
{
function read(file)
{
var fileReader = new FileReader();
fileReader.onload = function(){var fileData = fileReader.result};
fileReader.readAsText(file);
}
fileEntry.file(read);
}
directoryEntry.getFile(
"testFile",
{create: false},
readFile
);
}
requestFileSystem(Window.PERSISTENT, grantedQuota, getFile);
}
var desiredQuota = 1024 * 1024 * 1024;
var quotaManagementObj = navigator.webkitPersistentStorage;
quotaManagementObj.requestQuota(desiredQuota, onQuotaRequestSuccess);
Хотя API-интерфейсы FileSystem и FileWriter больше не соответствуют стандартам трек, их использование может быть оправдано в некоторых случаях, на мой взгляд, потому что:
Однако, если «некоторые случаи» охватывают ваши собственные, вы должны решить.
* BakedGoods поддерживается не кем иным, как парень прямо здесь:)
Спасибо @Whitepaw,
Я обновил свой код с помощью:
_moveOneImgBack = (newArray, index) =>{
const arrayLength = newArray.length - 1
const newBackPlace = index == 0 ? arrayLength : index - 1
const image = newArray[index]
newArray.splice(index, 1)
// const image = images.shift(index)
newArray.splice(newBackPlace, 0, image)
this.props.container.updateData({ images: newArray })
}
, и теперь он работает отлично, я застрял в том факте, что это может иметь какое-то отношение к редуксу immutables. Так что это указывает на неправильное использование .shift ()
... вы используете shift неправильно:
array = ['foo', 'bar', 'not', 'feeling', 'welcome', 'by jack', 'ass users']
array.shift(whatEverIndex)
вывод всегда будет первым индексом, то есть 'foo', и потому что ваш индекс правильный и вы используете
array.splice(newIndex, 0, item)
[ 119] правильно, ваш массив меняется странным образом.
Попробуйте скопировать нужный элемент, затем удалите его с помощью .splice (), например:
const item = array[index] //copy item
array.splice(index, 1) //remove old item
array.splice(newIndex, 0, item) //place item
Забавно, что никто из вас, ребята, NaN , laruiss , Антуан Грандшамп , J-Alex нашел время, чтобы действительно сделать то, что вы должны делать в стеке с потоком ... вы знаете, помогите кому-нибудь. Черт побери, Каскарла, , Удачи, Рис, надеюсь, это решило это для тебя.