繁体   English   中英

如何使用react-native-fs?

[英]How to use react-native-fs?

如果componentWillMount()函数第一次运行,则items数组为空。 为什么?

componentWillMount() {
    items.splice(0, items.length);
    RNFS.readDir(RNFS.DocumentDirectoryPath)
    .then((result) => {
        console.warn('result: ', result); // debug

        for(var i = 0; i < result.length; i++) {
            if(result[i].name.endsWith('.txt')) {
               var tmp = result[i].name;
               console.warn(tmp); // debug
               items.push(tmp);
            }
        }
    })
    .catch((err) => {
        console.log(err.message, err.code);
    });

    console.warn(items); // empty
}

并使用readFile()获取.txt的内容, con为空

renderItem(item) {
    return (
        <View style = {styles.renderItemContainer}
        key={items.indexOf(item)} >
            <TouchableOpacity style={styles.renderItemTouchableOpacity}
                onPress = {() => {
                    fileName = item;

                    var path = RNFS.DocumentDirectoryPath + '/' + fileName;

                    RNFS.readFile(path, 'utf8')
                    .then((contents) => {    
                        console.warn(contents); 
                       con = contents; // not working
                    })
                    .catch((err) => {
                        console.log(err.message, err.code);
                    });

                    console.warn(con); // empty

                    this.props.navigation.navigate('editorScreen');
                }}>
                <Text style = {styles.renderItemText}>
                    {item}
                </Text>
            </TouchableOpacity>
        </View>
    );
}

render()函数中,将items数组用于ScrollView列表.txt文件

render() {
    return(
        ....
        <ScrollView>
            {
                items.map((items) => this.renderItem(items))
            }
        </ScrollView>
        ....
    );
}

尝试:

componentWillMount() {
items.splice(0, items.length);
RNFS.readDir(RNFS.DocumentDirectoryPath)
.then((result) => {
    console.warn('result: ', result); // debug

    for(var i = 0; i < result.length; i++) {
        if(result[i].name.endsWith('.txt')) {
           var tmp = result[i].name;
           console.warn(tmp); // debug
           items.push(tmp);
        }

    }
    console.warn(items); // empty
})
.catch((err) => {
    console.log(err.message, err.code);
});


}

您的诺言运行异步=> console.warn在诺言解决之前被调用(.then(...))

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM