2017-09-27 101 views
1

试图找出如何从数据库中获取单个对象,我知道它的关键,在ReactJS中。通过反应中的ID查询

import { db } from 'baqend'; 

    componentWillMount() { 
    db.Companies.load('16747fce-f0b1-422b-aa60-220c2dccac58') 
     .then((response) => { 
     console.log(response); 
    }); 
    } 

我得到这个错误:

TypeError: Cannot read property 'load' of undefined 
EditCompany.componentWillMount 
src/containers/EditCompany.js:33 
    30 | } 
    31 | 
    32 | componentWillMount() { 
> 33 | db.Companies.load('16747fce-f0b1-422b-aa60-220c2dccac58') 
    34 |  .then((response) => { 
    35 |  console.log(response); 
    36 | }); 

我想直接在组件中做到这一点,但该项目使用入门作出反应。这就像一个查看公司的详细信息页面。

回答

1

原因是,数据库尚未连接,您必须等待连接,然后才能请求数据。 有两种方法可以解决这个问题。第一个选项是简单地调用准备功能的数据库对象提供这样

db.ready().then((db) => { 
    db.Companies.load(.... 
}) 

我假设你不使用我们的反应 - 终极版起动,但一个简单的创建反应的应用程式。对于这种情况,我们刚刚创建了react-baqend-provider,但尚未记录,但您可以安装它。

$ yarn install react-baqend-provider 

然后使用baqendProvider,它得到一个数据库连接实例,如果你想在一个数据加载环绕你的应用程序在app.js或index.js

import { BaqendProvider } from 'react-baqend-provider' 

<BaqendProvider db={db.connect('codetalks17', true)}> 
    <YourApp /> 
</BaqendProvider> 

现在您的组件只需将您的组件包装在react-baqend-provider提供的Baqend Higher Order Component中。该组件将正确的数据库实例传递给组件属性。

import { baqend } from 'react-baqend-provider' 
class EditCompany extends Component { 
    componentDidMount() { 
    const { db } = this.props 
    db.Companies.load(....... 
    } 
} 
export default baqend(EditCompany) 

希望这有助于

+0

的等待连接做好准备是我的问题。我正在使用你的启动器,这太棒了......但是我想玩弄一些查询来验证我的数据建模,并且现在想保持这种状态。谢谢! –

+0

如果有人发现这个......更容易的是在react-redux-starter中复制这些模式,并在那里修改查询,然后使用redux记录器来确保您获得了您认为的所有内容。 –