2017-06-01 33 views
0

出於某種原因,我不能做到這一點this.state.something突變而引起的問題

this.state.something.map(obj => obj.id) 

,因爲它造成額外的重新描繪。如何從狀態獲取某些內容,而不將其分配給新的變量?

我用來做這個醜陋的黑客

something_state_holder = this.state.something 
something_state_holder.map(obj => obj.id) 

,但有沒有更好/更優雅的方式?

+1

'this.state.something.map(obj => obj.id)'不會影響'state'值,它是迭代'state'值來創建ui或進行一些計算的正確方法。 –

+0

你想要達到什麼目的? 'map'不會改變,它會從你的初始數組中創建一個新的數組。 – atomrc

回答

1

正如@ mayank-shukla所說,你在這裏做的事情是完全有效的。 map()方法遍歷數組並返回和數組,但不會改變迭代的數組。這裏的MDN documentation說什麼:

map()方法創建調用此數組中的每個元素上所提供的功能,結果一個新的陣列。

map不改變它被調用的數組(儘管回調,如果調用,可能會這樣做)。

然而,你應該想打一個陣列上的淺表副本,您可以用切片:

something_state_holder = this.state.something.slice(); 
var resulting_array = something_state_holder.map(obj => obj.id); 

這遍歷的副本,而不是國家。你所做的不是創建一個數組,你只需將對同一個數組的引用分配給一個新變量。因此改變這一點會改變狀態。