gpt4 book ai didi

javascript - 无法将 mst 模型数据从一个模型复制到另一个模型

转载 作者:行者123 更新时间:2023-12-05 05:36:49 25 4
gpt4 key购买 nike

我正在尝试制作一个新闻应用程序,它可以从新闻 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.identifiertypes.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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com