我正在尝试制作一个新闻应用程序,它可以从新闻 API 获取响应并将其存储在 newsFeed 中,然后用户可以将一些新闻标记为收藏夹,然后将这些收藏夹存储到新模型收藏夹中
这是我遇到的错误
错误:[mobx-state-tree] 如果对象已经是同一个或另一个状态树的一部分,则无法将对象添加到状态树。试图将对象分配给“/newsStore/favorite/0”,但它已经存在于“/newsStore/newsFeed/0”,js 引擎:hermes 这是我的新闻模型
export const NewsModel = types
.model('News')
.props({
newsFeed: types.array(News),
favorite: types.array(News),
totalResults: types.maybeNull(types.number),
newsUserTask: types.optional(AsyncTask, {}),
})
这就是我调用 api 并将其存储在 newsFeed 中的方式
.actions(self => {
const newsCall = (page: number, feed: boolean) =>
runTask(self.newsUserTask, function* ({ exec }) {
const result = yield* toGenerator(
self.environment.baseApi.newsFeed(page),
);
exec(() => {
if ((result as NewsTypeResponse).status === 'ok') {
if (self.newsFeed.length) {
if (page < Math.ceil(self.totalResults / 10)) {
self.newsFeed = castToSnapshot([
...self.newsFeed,
...(result as NewsTypeResponse).articles,
]);
} else {
self.rootStore.errorStore.setError(
translate('errors.endOfPage'),
);
}
self.newsFeed = castToSnapshot([
...self.newsFeed,
...(result as NewsTypeResponse).articles,
]);
} else {
if (feed) {
self.totalResults = castToSnapshot(
(result as NewsTypeResponse).totalResults,
);
self.newsFeed = castToSnapshot(
(result as NewsTypeResponse).articles,
);
} else {
self.newsData = castToSnapshot(
(result as NewsTypeResponse).articles,
);
}
console.log('load more working');
}
console.log('working');
} else {
console.log('not working');
}
});
});
return { newsCall };
})
这就是我尝试存储在收藏夹中的方式
.actions(self => ({
setFav(item: NewsTypes) {
self.favorite.push(item);
},
}))
我该怎么做我尝试了一些像这样的解决方案 Cannot add an object to a state tree if it is already part of the same or another state tree
最佳答案
您可以将您的 favorite
数组建模为对 News
的引用数组,然后只需将标识符添加到 setFav
中的该数组> 操作(假定您的 News
模型具有 types.identifier
或 types.identifierNumber
)。关于这些概念的更多信息可以是found here .
export const NewsModel = types
.model('News')
.props({
newsFeed: types.array(News),
favorite: types.array(types.reference(News)),
totalResults: types.maybeNull(types.number),
newsUserTask: types.optional(AsyncTask, {}),
})
.actions(self => ({
setFav(item: NewsTypes) {
self.favorite.push(item.id);
},
}));
关于javascript - 无法将 mst 模型数据从一个模型复制到另一个模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/73252992/