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

标签 javascript react-native mobx state-management mobx-state-tree

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

相关文章:

javascript - 如何将CSS应用于动态HTML内容?

Javascript 用空字符串替换特殊字符

javascript - 如何应用翻转声音

ios - 移动第三方文件夹后找不到“config.h”文件

javascript - useEffect 获取 firebase 数据

reactjs - 使用 mobx 与 React 功能组件且不使用装饰器

javascript - 从文本加载javascript中的html文档

javascript - 将组件连接到 redux 全局状态 vs 将 props 传递给 React-Native 中的子组件

javascript - 我们如何在 mobx-state-tree 中维护文件类型 "File"

javascript - MobX 与 MobX 状态树