簡體   English   中英

如何將新項目推入immutableJS的深層嵌套記錄中

[英]how to push a new item into a deeply nested Record in immutableJS

我正在嘗試將一個新項目推入一個深層嵌套的不可變記錄中。

  const i = Immutable.Record({
    nested: new (Immutable.Record({
      someKey: [{id:1,name:'adam'}, {id:2,name:'steve'}],
    })),
  });
  const myMap = new i;
  const myNewMap = myMap.updateIn(['nested', 'someKey'], (fav)=>    fav.push({id:3,name:'dan'}));

  console.log(myNewMap.toJS());

我期望的是使用新值更新嵌套列表,但實際輸出為

  [object Object] {
  nested: [object Object] {
    someKey: 3
    }
  }

所以我做錯了什么,那么我將如何使用新值更新記錄?

這是示例http://jsbin.com/nipolimuyu/edit?html,js,console的jsbin

您在傳遞給updateIn的函數中缺少return語句(請注意Array.push不會返回結果數組!)。 它應該是:

const myNewMap = myMap.updateIn(
  ['nested', 'someKey'], 
  (fav) => {
    fav.push({id:3,name:'dan'})
    return fav
  })

小心點

您的初始obj應該都是immutableJS obj。 您可以使用fromJS()。

在您的示例中,您需要將數組添加為ImmutableJS列表

const i = Immutable.Record({
    nested: new (Immutable.Record({
    someKey: new Immutable.List([{id:1,name:'adam'}, {id:2,name:'steve'}]),
  })),
});
// The bad way, add a normal JS array to an immutableJS Record/map
const i = Immutable.Record({
    nested: new (Immutable.Record({
    someKey: [{id:1,name:'adam'}, {id:2,name:'steve'}],
  })),
});

所以最后您只需要按照自己的意願去做

const myNewMap = myMap.updateIn(['nested', 'someKey'], fav => fav.push({id:3,name:'dan'}));

因此,現在您可以使用immutableJS push()函數返回一個新的immutableJS對象。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM