私はlodashとredux/reactを使って簡単なアプリを作っています。今は、複数のオブジェクトを持つオブジェクトを返しています。だから、私は最終的なオブジェクトを得るとき、このようなものに見えます。ロダッシュを使用して、複数のオブジェクトでオブジェクトを更新しようとしています。 (編集項目)
オブジェクト{2:オブジェクト、34:オブジェクト}
各オブジェクトは、タイトル、ID、説明を有します。私はmapKeysにロダッシュを使用して、単一のオブジェクト内の各オブジェクトをIDでキー入力するようにしました。このようにして、各オブジェクトを見つける方が簡単です。例えば、Mainobject [34]はオブジェクト内で2番目であってもそのオブジェクトを返します。
これですべてがうまくいきました。オブジェクトを更新したり、コードを編集して切り抜きオブジェクトの1つを置き換えたいと考えています。私はredux/reactを使用しているので、これを理解することが私のやりたいことを理解するために必要となります。
私は、_.getを使用してmainObjectから項目を見つけて、その特定の項目を_.mergeで更新しようとしていますが、_.updateを使用しようとしていますが、私は、コンソールでこれを取得しています私の現在の状態のはconsole.log:
現在の状態は次のとおりです。 - >オブジェクト{2:オブジェクト、34:オブジェクト}
現在の状態は次のとおりです。 - >オブジェクト{ 2:オブジェクト、34:オブジェクト、オブジェクトオブジェクト:未定義}
第2のコンソleにはIDが34のオブジェクトがあり、すべてが更新され正しく動作しますが、最後にはundefindオブジェクトObjectが取得されています。ここで
は私の減速である:ここでは
const reducer = function(state={}, action) {
switch(action.type) {
case "POST_BOOK":
return _.mapKeys(action.payload, 'id');
break;
case "DELETE_BOOK":
return _.omit(state, action.payload);
break;
case "UPDATE_BOOK":
let foundItem = _.get(state, action.payload.id);
let updateItem = _.merge(state[action.payload.id],foundItem,action.payload);
console.log(updateItem);
return _.update(state, state[action.payload.id], updateItem);
break;
}
return state
}
は私のアクションは、次のとおりです。
store.dispatch({
type: "POST_BOOK",
payload: [
{
id: 34,
title: 'this is the book title',
description: 'this is the book description',
price: 3
},
{
id: 2,
title: 'this is the book title 2',
description: 'this is the book description 2',
price: 3.2
}
]
});
// store.dispatch({
// type: "DELETE_BOOK",
// payload: 2
// });
store.dispatch({
type: "UPDATE_BOOK",
payload: {
id: 34,
title: 'this is book edit title',
description: 'this is book edit edit',
price: 2341.23
}
})
_.update' 'の最後のパラメータがある
そして、これはトリックを行う必要があります関数(https://lodash.com/docs/4.17.4#update)であるはずです。ここではオブジェクトに渡します。これは私が思う問題かもしれません – atomrc
関数を受け取り、選択されたオブジェクトを更新する方法はありますか? –
あなたのコードを見ると、 'return updateItem'を返すだけでいいと思います(名前を変更するかもしれませんが、分かりません)。それはあなたが必要とするすべての情報を持っているようですが、間違っていますか? – atomrc