编辑:我设法使用下面的代码延迟了初始加载,因此它现在可以正确读取并在启动时显示文件名。现在我唯一的问题是在某些数据发生变化时立即更新部分列表。
componentWillMount() {
setTimeout(() => {
this.sortAndPlace(this.state.list, this.state.songs)
})
}
我正在尝试构建一个应用程序,并且我是 react-native 及其所有库的新手。我想用 react-native-fs 读取文件,从那里构建一个 sectionlist 数据,当文件被添加、删除和修改时,我想通过状态更新来反映这种变化。
RNFS.readDir(path)
.then((result) => {
// log the file contents
return Promise.all(result)
})
.then((contents) => {
for (var i = 0; i < contents.length; i++) {
if (contents[i].isFile() && contents[i].name !== "ReactNativeDevBundle.js")
{
var labelTemp = contents[i].name.split(".")
var label = labelTemp[0]
song.push(new Song(label))
}
/*RNFS.unlink(contents[i].path)
.then(() => {
console.log('FILE DELETED');
})
// `unlink` will throw an error, if the item to unlink does not exist
.catch((err) => {
console.log(err.message);
});*/
}
})
sortAndPlace(secArray ,array) {
sectionNames = []
filteredSectionNames = []
for (var i = 0; i < array.length; i++) {
sectionNames.push(array[i].name.substring(1,0))
}
filteredSectionNames = sectionNames.filter(function(item, pos) {
return sectionNames.indexOf(item) == pos;
}).sort()
for (var i = 0; i < filteredSectionNames.length; i++) {
secArray[i] = {id: i, title: filteredSectionNames[i], data: []}
}
for (var i = 0; i < secArray.length; i++) {
for (var j = 0; j < array.length; j++) {
if (array[j].name.substring(1,0) === secArray[i].title) {
secArray[i].data[secArray[i].data.length] = {id: j, text:
array[j].name}
}
}
}
function compare(a,b) {
if (a.text < b.text)
return -1;
if (a.text > b.text)
return 1;
return 0;
}
for (var k = 0; k < secArray.length; k++) {
secArray[k].data.sort(compare);
}
this.setState({
list: secArray,
songs: array
})
}
我正在使用我的手机使用命令“react-native run-android”进行测试。编写歌曲数组的承诺迟到了,所以有时应用程序会打开数据,有时我必须重新输入才能看到数据。当我修改文件并重新创建数组时,我必须完全关闭应用程序并启动它以查看更改。redux 能解决这个问题吗?你能告诉我如何解决这个问题吗?先感谢您!