在我的本机应用程序中,搜索场景被设置为第一个元素。 如果加载,应用程序正在使用RESTful API调用同步数据。
这样,所有数据都会插入到articles
模型中。并且数据可以在我的搜索场景中使用,没有任何问题 - 正如预期的那样。
但是在我的ArticleContainer
场景(用于选择搜索结果)中,无法访问数据。我必须重新加载应用程序。之后,可以访问数据。
SearchContainer.js(入口点)
import Datastore from 'react-native-local-mongodb'
import synchronize from '../../lib/sync'
const Articles = new Datastore({ filename: 'articles' })
export default class SearchContainer extends Component {
componentDidMount () {
synchronize(this.props.navigator)
}
}
同步
export default async function synchronize (navigator) {
// ...
collection.insert(data.MainDocs, (err, newDocs) => {
if (err) console.warn(err)
else {
console.log(`inserted ${newDocs.length}`) // Is 200
}
})
结果,我收到了日志消息,其中添加了许多文档(在我的情况下为200)。
如果我搜索,则所有元素都存在,因为搜索可以选择它们。点击结果应该调用ArticleContainer
:
但在这里我根本找不到任何文件。计数结果为0。
我必须重新加载该应用。重新加载后,所有数据都按预期存在。但是,当然,我不想重新加载。 这里缺少什么?
ArticleContainer.js
import Datastore from 'react-native-local-mongodb'
const Articles = new Datastore({ filename: 'articles', autoload: true })
export default class ArticleContainer extends Component {
componentDidMount () {
Articles.count({}, (err, count) => {
if (err) console.warn(err);
console.log('Articles', count); // <- Result is 0; expected: 200
})
}
}
答案 0 :(得分:0)
我通过以下方式“解决”此问题:
在我认为在相同服务更新/插入新数据后需要加载的视图中,我删除了此内容:
const User = new Datastore({ filename: 'users', autoload: true })
稍有延迟后:
setTimeout(() => { this._getCurretUser(); },1000);
我重新加载了数据存储区:
var User = new Datastore({ filename: 'users' });
User.loadDatabase( (err) => {
User.findOne({ isCurrentUser: true }, (err, result) => {
if(err){
console.log(err);
}else{
this.setState({ currentUser: result });
}
});
});
我认为必须更新lib ... 我花了一些时间来解决这个问题,并且在阅读了lib代码之后,这才是解决问题的方法。