领域 js:访问无效的结果对象
realm js: Access to invalidated Results objects
我在我的 React 本机应用程序中使用领域尝试从领域数据库中查询对象列表。
function* loadPlaces() {
let realm;
try {
const filter = yield select(getFilter);
realm = yield call(Realm.open, {schema: [PlaceSchema]});
let places = realm.objects(PlaceSchema.name);
if (filter.search) {
places = places.filtered("name CONTAINS [=10=]", filter.search);
}
switch (filter.sort) {
case Sort.BY_NAME:
places = places.sorted('name');
break;
}
yield put(loadPlacesSucceed(places));
} catch (e) {
console.warn(e.message);
} finally {
if (realm) {
realm.close();
}
}
}
之后我在 flatlist 中使用结果数据:
<FlatList
data={this.props.items}
keyExtractor={(item) => '' + item.id}
renderItem={({item}) =>
<PlaceItem item={item} onClick={(item) => this._onItemClicked(item)}/>}/>
并收到错误:
Access to invalidated Results objects.
如果我删除 realm.close() 错误消失,但我需要在查询后关闭领域。
为什么您认为您需要在查询后关闭 Realm?如果关闭 Realm,您将无法访问所有自动更新的集合,例如 Results
,因此只要您需要访问特定的 Results
实例,就不应关闭 Realm。
发生这种情况是因为一旦 realm
关闭,所有对数据的访问(在当前情况下为 Results
)都会丢失。
然而,正如 OP "not close it at all"
所提到的,这不是一个好方法。理想情况下,它应该被关闭。你可以看到 official documentation 说,
// Remember to close the realm when finished.
所以你基本上可以做的是,在 componentDidMount
中打开 realm
并在 componentWillUnmount
中关闭它。
喜欢,
componentDidMount() {
Realm.open({
schema: [{ name: 'SCHEMA_NAME', properties: { name: 'string' } }]
}).then(realm => {
this.setState({ realm });
});
}
componentWillUnmount() {
// Close the realm if there is one open.
const { realm } = this.state;
if (realm !== null && !realm.isClosed) {
realm.close();
}
}
我在我的 React 本机应用程序中使用领域尝试从领域数据库中查询对象列表。
function* loadPlaces() {
let realm;
try {
const filter = yield select(getFilter);
realm = yield call(Realm.open, {schema: [PlaceSchema]});
let places = realm.objects(PlaceSchema.name);
if (filter.search) {
places = places.filtered("name CONTAINS [=10=]", filter.search);
}
switch (filter.sort) {
case Sort.BY_NAME:
places = places.sorted('name');
break;
}
yield put(loadPlacesSucceed(places));
} catch (e) {
console.warn(e.message);
} finally {
if (realm) {
realm.close();
}
}
}
之后我在 flatlist 中使用结果数据:
<FlatList
data={this.props.items}
keyExtractor={(item) => '' + item.id}
renderItem={({item}) =>
<PlaceItem item={item} onClick={(item) => this._onItemClicked(item)}/>}/>
并收到错误:
Access to invalidated Results objects.
如果我删除 realm.close() 错误消失,但我需要在查询后关闭领域。
为什么您认为您需要在查询后关闭 Realm?如果关闭 Realm,您将无法访问所有自动更新的集合,例如 Results
,因此只要您需要访问特定的 Results
实例,就不应关闭 Realm。
发生这种情况是因为一旦 realm
关闭,所有对数据的访问(在当前情况下为 Results
)都会丢失。
然而,正如 OP "not close it at all"
所提到的,这不是一个好方法。理想情况下,它应该被关闭。你可以看到 official documentation 说,
// Remember to close the realm when finished.
所以你基本上可以做的是,在 componentDidMount
中打开 realm
并在 componentWillUnmount
中关闭它。
喜欢,
componentDidMount() {
Realm.open({
schema: [{ name: 'SCHEMA_NAME', properties: { name: 'string' } }]
}).then(realm => {
this.setState({ realm });
});
}
componentWillUnmount() {
// Close the realm if there is one open.
const { realm } = this.state;
if (realm !== null && !realm.isClosed) {
realm.close();
}
}