2015-12-27 41 views
5

其實我需要用json對象(React和lodash)完全處理mysite前端。用lodash更新json

我通過Ajax調用我們說得到的原始數據,

starred[] //returns empty array from server 

,當用戶點擊星布頓也正在增加新的JSON,

starred.push({'id':10,'starred':1}); 

如果用戶再點擊主演應爲0

current_star=_findWhere(starred,{'id':10}); 
_.set(curren_star,'starred',0); 

但這樣做的console.log

console.log(starred); //returns 
[object{'id':10,'starred':0}] 

但實際上當它被重複了全球JSON是沒有更新,而正在執行一些其他操作JSON是喜歡,

console.log(starred); //returns 
[object{'id':10,'starred':1}] 

如何更新全局,我想一旦我改變了JSON ,它應該永遠改變。我應該有什麼想法提出一些更好的框架來處理json更容易。

以前謝謝!

+0

你使用的是underscore.js庫嗎?可能是很好的寫在 –

+0

nope的問題......它的lodash.js –

+0

請問你可以添加更多的代碼嗎? – Kiril

回答

0

我認爲問題在於變異的原始狀態。 而不是使推的,你需要做以下FE:

var state = { 
    starred: [] 
}; 

//perform push 
var newItem = {id:10, starred:1}; 
state.starred = state.starred.concat(newItem); 

console.log(state.starred); 
//{ id: 10, starred: 1 }] 

var newStarred = _.extend({}, state.starred); 
var curr = _.findWhere(newStarred, {id: 10}); 

curr.starred = 0; 

state = _.extend({}, state, {starred: newStarred}); 

console.log(state.starred) 
//{ id: 10, starred: 0 }] 

要以更加好看的時尚解決這個問題,你需要使用任一陣營的不變性幫手,或ES6的東西,如:{...狀態{{starred:[]}},而不是每次都擴展新的對象。或者只是使用react-redux =)