React Redux Firebase - 使用 firestore 时第一个文档的 isLoaded 仅为 false

React Redux Firebase - isLoaded only false for the first document when using firestore

在我的应用程序中,我使用 react-redux-firebase 版本 2.5.1redux-firestore 版本 ^0.13.0。我呈现与客户的对话列表(称为线程),每次用户转到另一个线程,直到它被加载,我希望他看到一个加载微调器。我的问题是,只有当我在应用程序部署后第一次进入线程时,微调器才会显示,之后每次我更改线程时,方法 isLoaded 始终为真,即使我看到一些秒页面显示上一个线程。有没有人遇到过类似的事情,可以帮我解决一下吗?

这是我的组件

const mapStateToProps = (state, props) => {
    const customerId = props.match.params.id;
    return {
        thread: state.firestore.data.thread,
        ...
    };
};

export default compose(
    withStyles(styles),
    connect(mapStateToProps, mapDispatchToProps),
    firestoreConnect(props => [
        {
            collection: "thread",
            doc: props.customerId,
            storeAs: "thread"
        }
...
    ])
)(ThreadView);

这是我的渲染方法

       render() {
            const {firebase, thread} = this.props;            
            const res = !isLoaded(thread); // after the first load it's always false
            console.log(`customerId: ${customerId}, isLoaded: ${res}`)
            if (res) {
                return <LoadingSpinner/>;
            }
...

我也遇到了这个问题,目前还没找到满意的解决办法。但是,我确实找到了解决方法:

编写自定义 isLoaded 函数来检查任何正在进行的请求:

const checkIsLoaded = function(firestore) {
    return !Object.values(firestore.status.requesting).find(isRequesting => isRequesting);
};

因为所有当前待处理请求的状态 (true/false) 都保存在 firestore.status.requesting 下的 redux 存储中,我们可以检查它,看看是否有任何请求当前仍在加载!

这不是一个理想的解决方案,因为它会检查所有正在进行的请求,而不仅仅是您要检查的特定请求。但是,根据您的用例,这可能就足够了。