javascript 错误:找不到领域上下文,你在a中调用useRealm()了吗< RealmProvider/>?

f4t66c6m  于 2023-08-02  发布在  Java
关注(0)|答案(1)|浏览(94)

使用useRealm()钩子时出现以下错误:
错误错误:找不到领域上下文。是否在<RealmProvider/>?中调用useRealm()
为什么我会得到这个错误,以及如何纠正它?
我已经遵循了React Native by Realm的快速入门,如下所述:https://www.mongodb.com/docs/realm/sdk/react-native/quick-start/
这里是源代码。
App.jsx:

import TestView from './src/modules/sandbox/TestView';

function App() {
  return <TestView />;
}

export default App;

字符串
TestView.jsx:

import React from 'react';
import Realm from 'realm';
import { createRealmContext } from '@realm/react';
import TestComponent from './TestComponent';

// Define your object model
class Profile extends Realm.Object {
  static schema = {
    name: 'Profile',
    properties: {
      _id: 'objectId',
      name: 'string',
    },
    primaryKey: '_id',
  };
}

// Create a configuration object
const realmConfig = {
  schema: [Profile],
};

// Create a realm context
const { RealmProvider, useRealm, useObject, useQuery } = createRealmContext(realmConfig);

export default function TestView() {
  return (
    <RealmProvider>
      <TestComponent />
    </RealmProvider>
  );
}


TestComponent.jsx:

import { StyleSheet, Text, View } from 'react-native';
import React from 'react';
import { useRealm } from '@realm/react';

export default function TestComponent() {
  const realm = useRealm();

  return (
    <View style={styles.container}>
      <Text>Aloha</Text>
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    justifyContent: 'center',
    backgroundColor: 'white',
  },
});


Realm和RN版本:

"realm": "^11.10.1",
"@realm/react": "^0.5.1",
"react-native": "0.71.11",


Android 13:


的数据
iOS 16.4:


t3irkdon

t3irkdon1#

我已经在GitHub上打开了一个与此问题相关的工单(https://github.com/realm/realm-js/issues/6013)。长话短说:文档混乱,将进行更新。以下是对话:

@takemeyer:

@MinisX您必须在应用程序中使用从createRealmContext返回的useQuery。另一种选择是省略createRealmContext,而是从@realm/react导入RealmProvider并实现它:

<RealmProvider schemas={[Person]}>
//...

字符串
@realm/react中已经示例化了一个默认的RealmContext,所以只有在创建多个Realm时才真正需要调用createRealmContext。如果使用Realm,我们将很快更新文档以反映此方法。

@MinisX:

@takameyer谢谢你的回应。根据文档,useQueryuseRealm钩子有不同的用途。因此,我不太理解你的第一个建议。

  • useQuery()钩子返回给定类型的领域对象的集合。
  • useRealm()钩子返回打开的领域示例。

https://www.mongodb.com/docs/realm/sdk/react-native/use-realm-react/
我今天会给予你的第二个建议,并给出反馈。但它也会引起混乱,正如文档所述:

  • 使用RealmProvider Package 组件后,组件及其子组件将可以访问useRealm()、useObject()和useQuery()钩子。

你的= something用户已经定义了,而不是“instead import the RealmProvider from @realm/react“。

@takemeyer:

@MinisX我们正在重新编写该文档,以减少混乱。我建议不要使用createRealmContext,除非您需要两个不同的Realm数据库(这并不常见)。
只需从@realm/react导入RealmProvider并将其用于应用程序 Package 器。然后,您可以使用直接从@realm/react导入的useQueryuseRealmuseObject钩子来全局访问您的领域数据库。
例如,在您的 Package 器中:

import { RealmProvider } from "@realm/react";
 
 export default function TestView() {
   return (
     <RealmProvider schemas={[Profile]}>
       <TestComponent />
     </RealmProvider>
   );
 }


在孩子身上:

import { useQuery } from "@realm/react";

export function ProfileList() {
  const profiles = useQuery(Profile);
  //..render the result
}

@MinisX:

@takameyer这个作品,谢谢澄清!

相关问题