2015-05-22 14 views
11

ciekaw, czy istnieje jakakolwiek część ES6 sprawia, że ​​tego rodzaju kontrole trochę bardziej zwięzły:ES6 klucz skrótowym przedmiotem kontroli

componentWillReceiveProps(nextProps) { 
    if(nextProps && nextProps.filterObj && nextProps.filterObj.area){ 
     // go ahead 
    } 
} 
+0

Chcesz go odczytać lub zmodyfikować? Do czytania możesz go zniszczyć. – zerkms

+0

Krótka odpowiedź brzmi: nie. Nie rozumiem, jak pomoże mi destrukturyzacja. 'var {filterObj: {area}} = nextProps;' zwróci ten sam błąd co "nextProps.filterObj.area". –

Odpowiedz

11

Nie, operator egzystencjalny dokonał go w ES6; jednak jest to still discussed.

Można użyć dowolnego z existing methods, oczywiście, jak

if (((nextProps||{}).filterObj||{}).area) { 
    // go ahead 
} 

Ponadto można spróbować rozpad i domyślne wartości:

function componentWillReceiveProps({filterObj: {area} = {}} = {}) { 
    if (area) { 
     // go ahead 
    } 
} 
+0

Problem z tym podejściem polega na tym, że połknie zera, puste struny i tablice. Poprawną metodą jest porównanie z 'niezdefiniowanym', ale sprawia, że ​​kod jest zbyt duży. –

+0

@ lolmaus-AndreyMikhaylov: Nie rozumiem, dlaczego połknąłby zera i puste struny, na pewno nie spodziewasz się tych, kiedy chcesz uzyskać dostęp do innej nieruchomości na wartości? Jeśli masz na myśli '.area', to z pewnością możesz dodać porównanie"! == undefined ". I nie, to na pewno nie połknie tablic. – Bergi

+0

Na przykład, chcesz, aby '3' był wartością domyślną, ale' 0' jest również wartością legal. Jeśli zrobisz "wartość || 3", nie będzie możliwe przekazanie zera. –