我正在try 做一个新闻应用程序,可以从新闻API的react ,并存储在新闻馈送,然后用户可以标记一些新闻作为Collection ,然后存储这些Collection 到新的模式Collection

这就是我得到的错误

错误:[mobx-state-tree]如果某个对象已经是同一或另一个状态树的一部分,则无法将该对象添加到状态树.try 将对象分配给‘/News Store/Favorite/0’,但它已经位于‘/News Store/News Feed/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并将其存储在新闻提要中的方式

.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 };
  })

这就是我试图在Favorite存储的方式

.actions(self => ({
    setFav(item: NewsTypes) {
      self.favorite.push(item);
    },
  }))

我怎么做才能做到这一点呢?我try 了一些像这样的解决方案

推荐答案

您可以将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相关问答推荐

通过使用100%间隔时间来代表我们还剩多少时间来倒计时

浮动Div的淡出模糊效果

TypeScript索引签名模板限制

如何使覆盖div与可水平滚动的父div相关?

为什么当我解析一个promise时,输出处于挂起状态?

在WordPress中使用带有WPCode的Java代码片段时出现意外令牌错误

有条件重定向到移动子域

SPAN不会在点击时关闭模式,尽管它们可以发送日志(log)等

未捕获的运行时错误:调度程序为空

如何用javascript更改元素的宽度和高度?

为什么我不能使用其同级元素调用和更新子元素?

为什么我的Navbar.css没有显示在本地主机页面上?

在Java脚本中构建接口的对象

调用特定数组索引时,为什么类型脚本不判断未定义

Promise.race()返回已解析的promise ,而不是第一个被拒绝的promise

如何在Firebase中读取对象的特定字段?

React数组查找不读取变量

使用Java脚本在div中创建新的span标记

如何在单击链接时设置一个JavaScript变量(以打开弹出窗口的特定部分)

Html/JS:如何在脚本执行前阻止呈现?