React Redux Firebase - 使用 firestore 时第一个文档的 isLoaded 仅为 false
React Redux Firebase - isLoaded only false for the first document when using firestore
在我的应用程序中,我使用 react-redux-firebase
版本 2.5.1
和 redux-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 存储中,我们可以检查它,看看是否有任何请求当前仍在加载!
这不是一个理想的解决方案,因为它会检查所有正在进行的请求,而不仅仅是您要检查的特定请求。但是,根据您的用例,这可能就足够了。
在我的应用程序中,我使用 react-redux-firebase
版本 2.5.1
和 redux-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 存储中,我们可以检查它,看看是否有任何请求当前仍在加载!
这不是一个理想的解决方案,因为它会检查所有正在进行的请求,而不仅仅是您要检查的特定请求。但是,根据您的用例,这可能就足够了。