领域同步远程到本地

时间:2017-02-05 12:58:46

标签: reactjs asynchronous react-native realm

我刚开始使用Realm for Reactnative。通过示例代码和存储库,我设法创建了RealmObjectServer并在那里保留了一些数据。

我制作本地服务器的步骤:

  1. 从官方site
  2. 下载Realm移动平台
  3. 运行start-object-server.command
  4. 它要我在localhost:8090创建一个用户,我做了
  5. 管理从应用程序登录用户并使用以下内容在服务器中添加一些数据:
  6. Realm.Sync.User.login(
      'http://127.0.0.1:9080',
      'asd@asd.com', // username
      'asd', // password
      (err, user) => {
        if(err) {
          return console.log(err);
        }
        console.log(user);
        let realm = new Realm({
          schema: [this.PersonSchema],
          sync: {
            user,
            url: 'realm://localhost:9080/~/test'
          }
        })
    
        this.setState({ number: realm.objects('Person').length })
    
        realm.write(() => {
         realm.create('Person', { name: 'timon', age: 29 }, true)
        })
      }
    )
    以上代码段无法运行,我无法在此WYSWYG中正确格式化代码:D

    现在,我可以从远程对象服务器获取与PersonSchema相关的所有数据,但是我无法从本地领域(客户端)获得相同的数据。如果我想从客户端移动设备调用相同的模式(PersonSchema),我应该这样做吗? (不通过这样做获取数据)

    let realm = new Realm({ schema: [this.PersonSchema] })
    realm.objects('Person').map((item, i) => {
      return console.log(item);
    }
    

    Realm应该同步数据本身! 有没有我应该调用同步数据的功能? 在本地和远程数据库之间同步数据的正确方法是什么? 领域有什么好的例子或教程吗?我在官方文件中找不到任何东西。

    注意:如果我在不使用同步属性或不使用任何用户数据或外部登录功能范围的情况下创建新实例 - 它将创建一个本地对象,我可以访问它。但没有同步。

    import React, { Component } from 'react';
    import {
      AppRegistry,
      StyleSheet,
      Text,
      View
    } from 'react-native';
    import Realm from 'realm'
    
    export default class realmTest extends Component {
      constructor(props){
        super(props)
        this.state = { number: null }
    
        this.PersonSchema = {
          name: 'Person',
          properties: {
            name: 'string',
            age: 'int'
          }
        }
    
      }
    
      login(){
        Realm.Sync.User.login(
          'http://127.0.0.1:9080',
          'asd@asd.com',
          'asd',
          (err, user) => {
            if(err) {
              return console.log(err);
            }
            console.log(user);
    
            let realm = new Realm({
              schema: [this.PersonSchema],
              sync: {
                user,
                url: 'realm://localhost:9080/~/test'
              }
            })
    
            this.setState({ number: realm.objects('Person').length })
    
            // realm.write(() => {
            //   realm.create('Person', { name: 'timon', age: 29 }, true)
            // })
    
          }
        )
      }
    
      componentWillMount(){
        this.login()
    
      }
    
      render() {
    
        let realm = new Realm({ schema: [this.PersonSchema] })
        // realm.write(() => {
        //   realm.create('Person', { name: 'timon', age: 29 }, true)
        // })
        console.log(realm);
        return (
          <View style={styles.container}>
            <Text style={styles.welcome}>
              Remote Objects (number): {this.state.number}
            </Text>
            <View>
              <Text>
                Local Objects (number): {realm.objects('Person').length}
              </Text>
            </View>
            {realm.objects('Person').map((item, i) => {
              return(
                <View key={i}>
                  <Text>{item.name}</Text>
                </View>
              )
            })}
    
          </View>
        );
      }
    }
    
    const styles = StyleSheet.create({
      container: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        backgroundColor: '#F5FCFF',
      },
      welcome: {
        fontSize: 20,
        textAlign: 'center',
        margin: 10,
      },
      instructions: {
        textAlign: 'center',
        color: '#333333',
        marginBottom: 5,
      },
    });
    
    AppRegistry.registerComponent('realmTest', () => realmTest);

0 个答案:

没有答案