Ich kann keine Liste mit Realm erstellen, um sie mit einem Realm ListView zu verwenden.Wie funktioniert die Listeneigenschaft von realm?
Ich brauche 2 oder 3 Listviews zu machen, um die Teile des Codes unten sehen kann:
realm.js:
const Realm = require ('realm');
class UserEntrySchema extends Realm.Object {}
UserEntrySchema.schema = {
name:'User',
primaryKey:'id',
properties:{
id:'int',
name:'string',
username: 'string',
email: 'string',
}
};
class UserListSchema extends Realm.Object {}
UserListSchema.schema = {
name:'UserList',
properties: {
users :{type:'list', objectType:'User'}
}
};
class HistorySchema extends Realm.Object {}
HistorySchema.schema = {
name : 'History',
properties :{
items : {type:'list',objectType:'User'}
}
};
export default new Realm({
schema:[UserEntrySchema,UserListSchema,HistorySchema], schemaVersion:0});
ich einen ersten Listview mit dem folgenden Code ein:
export default class SearchTabScreen1 extends Component {
constructor(props) {
super(props);
this.state = {
searchText:'',
data:[]
};
}
componentDidMount(){
this.fetchUsers();
}
fetchUsers(){
console.log("FEEEEEETCH");
fetch('http://jsonplaceholder.typicode.com/users')
.then((response) => response.json())
.then((responseJson) => {
this.setState({
data : responseJson
});
var data = this.state.data;
realm.write(() => {
for (var i = 0; i < data.length; i++){
let myUser = realm.create('User',data[i],true);
}
console.log("ALLUSER", realm.objects('User'));
});
})
.catch(function(e) { // Failure callback registartion
alert('Failure fetching data');
console.log(e)
});
}
ich habe versucht, eine Liste Eigenschaft mit
zu machenUserListSchema
ohne Erfolg.
Und jetzt diese Listview funktioniert auch gut, wenn ich
realm.objects('User')
als Datenquelle verwendet wird.
Ich weiß nicht, ob es gut ist, so zu tun oder nicht.
Das zweite ListView ist ein "Suchverlauf", wenn eine Zeile des ersten ListView angeklickt wird, hat es die folgende Methode aufgerufen, die einen anderen Bildschirm drückt (react-native-navigation-Paket) und eine Realm-Liste auffüllen. Ich möchte diese Liste als Datenquelle für die ‚Geschichte Listview verwenden“
onPushPress(rowData) {
this.props.navigator.showModal({
title: "Random Title",
screen: "Project.WordDefinition",
passProps: {
definition: rowData.name
}
});
realm.write(() => {
let historyList = realm.create('History',{},true);
historyList.items.push({rowData});
});
}
}
Ich habe diesen Fehler:.
'Property' must be of type number
ich auch versucht:
onPushPress(rowData) {
console.log("ROWDATA", rowData);
this.props.navigator.showModal({
title: "Titre",
screen: "AccessiDico.WordDefinition",
passProps: {
definition: rowData.name
}
});
realm.write(() => {
let historyList = realm.create('History',{},true);
historyList.items.push({
id:rowData.id,
name:rowData.name,
username: rowData.username,
email: rowData.email,
});
console.log("ROWDATA",rowData);
console.log("ITEMS",realm.objects('History'));
console.log("List",historyList.items);
});
}
}
Und ich habe diese Fehler:
Attempting to create an object of type 'User' with an existing primary key value
Tut es bedeutet, dass ich "meine Benutzer" nicht im "UserEntrySchema" verwenden kann, um sie in eine Realm-Liste zu verschieben?
ich wirklich etwas Hilfe schätzen würde, es mit diesem in der Woche, die ich bin hart stecken hat: +1:
Dank!
PS: Hier ist, wie die Geschichte Listview ist codiert:
export default class HistoryTabScreen2 extends Component {
constructor(props) {
super(props);
// if you want to listen on navigator events, set this up
//this.props.navigator.setOnNavigatorEvent(this.onNavigatorEvent.bind(this));
const ds = new ListView.DataSource({rowHasChanged: (r1, r2) => r1 !== r2});
this.state = {
postDataSource: ds.cloneWithRows(realm.objects('History')),
};
}
renderRow(rowData, sectionId, rowId, highlightRow){
return(
<TouchableHighlight onPress={this.onPushPress.bind(this)}>
<View style={styles.row}>
<Text style={styles.rowText}>{rowData.name}</Text>
</View>
</TouchableHighlight>
)
}
render(){
return(
<ListView
dataSource={this.state.postDataSource}
renderRow={this.renderRow.bind(this)}
/>
);
}
Und das Protokoll meiner rowData, wenn ich eine Zeile des Listview geklickt:
'ROWDATA', { id: 5,
name: 'Chelsey Dietrich',
username: 'Kamren',
email: '[email protected]',
address:
{ street: 'Skiles Walks',
suite: 'Suite 351',
city: 'Roscoeview',
zipcode: '33263',
geo: { lat: '-31.8129', lng: '62.5342' } },
phone: '(254)954-1289',
website: 'demarco.info',
company:
{ name: 'Keebler LLC',
catchPhrase: 'User-centric fault-tolerant solution',
bs: 'revolutionize end-to-end systems' } }
Haben Sie ernsthaft jemand erwarten, einen Essay zu lesen? [Wie man ein minimales, vollständiges und überprüfbares Beispiel erstellt] (http://stackoverflow.com/help/mcve) – Christoph