React Native / MongoDB:只有在重新加载应用程序后才能访问新数据

时间:2017-08-28 17:46:53

标签: javascript node.js mongodb reactjs react-native

在我的本机应用程序中,搜索场景被设置为第一个元素。 如果加载,应用程序正在使用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
    })
  }
}

1 个答案:

答案 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代码之后,这才是解决问题的方法。