1

编辑:我设法使用下面的代码延迟了初始加载,因此它现在可以正确读取并在启动时显示文件名。现在我唯一的问题是在某些数据发生变化时立即更新部分列表。

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 能解决这个问题吗?你能告诉我如何解决这个问题吗?先感谢您!

4

1 回答 1

0

由于我发现我的粗心错误,我会回答这个帖子。原来我没有正确绑定函数。现在它的功能。对不起你的时间。

于 2018-03-01T11:03:28.477 回答