DxW*_*DxW 8 android realm reactjs react-native realm-js
更新
描述
我在Realm对象上有一个侦听器,用于获取更新。当服务器(或客户端)上有更新时,提供给侦听器的函数将调用setState({})。
奇怪的是,即使控制台说一切正常,并且表明render方法是用正确的数据调用的,我也看不到我的应用程序有任何更新。
如果我随机地(在1s,2s,20s ...之后)点击屏幕,UI会神奇地更新,并且一切正确。
如果我使用从按钮调用的函数执行相同的setState,那么我猜是因为按钮的动画触发了UI更新。
感谢您阅读本文。
制作步骤
您必须更新server_url和凭据才能工作。
react-native初始化测试npm install realm react-native链接域
由于领域尚未为64位做好准备,因此您还必须确保仅在32位中进行编译,以避免启动时应用崩溃
使用此代码:
App.js
import React, {Component} from 'react';
import {Platform, StyleSheet, Text, View} from 'react-native';
import Realm from 'realm'
import { SERVER_URL } from "./config/realm";
import { Utente } from "./config/schema";
export default class App extends Component {
loginAsync = async () => {
var realm_user = Realm.Sync.User.current
if(!realm_user){
const credentials = Realm.Sync.Credentials.usernamePassword('admin', '******' ,false);
realm_user = await Realm.Sync.User.login(SERVER_URL, credentials);
}
const config = realm_user.createConfiguration({
schema: [
Utente,
Realm.Permissions.Permission,
Realm.Permissions.User,
Realm.Permissions.Role],
schemaVersion: 1,
});
this.realm = new Realm(config);
var connectedUserData = this.realm.objects("Utente").filtered("id = $0", realm_user.identity)
connectedUserData.subscribe()
connectedUserData.addListener((connectedUserData)=>{
if(connectedUserData[0]){
this.setState({
connectedUserData: connectedUserData[0]
})
}
})
}
constructor(props){
super(props)
this.loginAsync()
this.state = {
connectedUserData: {
nome: 'not loaded'
}
}
}
render() {
return (
<View style={styles.container}>
<Text>{ this.state.connectedUserData.nome }</Text>
</View>
);
}
}
Run Code Online (Sandbox Code Playgroud)
Schema.js
export const Utente = {
name: "Utente",
primaryKey: "id",
properties: {
id: "string",
nome: 'string?',
permissions: '__Permission[]'
}
}
Run Code Online (Sandbox Code Playgroud)
Package.json
{
"name": "testBaseRealm",
"version": "0.0.1",
"private": true,
"scripts": {
"start": "node node_modules/react-native/local-cli/cli.js start",
"test": "jest"
},
"dependencies": {
"react": "16.6.3",
"react-native": "0.57.7",
"realm": "^2.27.0-rc.3"
},
"devDependencies": {
"@babel/core": "7.4.4",
"@babel/runtime": "7.4.4",
"babel-jest": "24.8.0",
"jest": "24.8.0",
"metro-react-native-babel-preset": "0.54.1",
"react-test-renderer": "16.6.3"
},
"jest": {
"preset": "react-native"
}
}
Run Code Online (Sandbox Code Playgroud)
其他一些奇怪的事情:
我建议您更改元素的键;这将迫使它重新加载发生的任何情况。
前任:
{
articoli.map(articolo => {
const isLoved = connectedUserData.loved_articles.filtered("id = $0", articolo.id ).length
const isLiked = connectedUserData.liked_articles.filtered("id = $0", articolo.id ).length
const numCommenti = articolo.commenti.length
return (
<SchedaArticolo
key={ `ALL_${articolo.id}_${isLoved}_${isLiked}_${numCommenti}` }
articolo={articolo}
isLoved={isLoved}
isLiked={isLiked}
numCommenti={numCommenti}
/>
)
})
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
487 次 |
最近记录: |