2017-02-23 25 views
6

boş cisimle atanan küme ayracı nesne, kodudurJS işlevi beyanı: Burada parametre bildiriminde

export function createConnect({ 
    connectHOC = connectAdvanced, 
    mapStateToPropsFactories = defaultMapStateToPropsFactories, 
    mapDispatchToPropsFactories = defaultMapDispatchToPropsFactories, 
    mergePropsFactories = defaultMergePropsFactories, 
    selectorFactory = defaultSelectorFactory 
} = {}) {...} 

ne yapar {connectHOC = connectAdvanced ...} = {} işlev parametre bildiriminde içeride demek?

Ben

= {} 

fonksiyon parametresinin varsayılan değeri anlamına gelebilir biliyorum, ama önceki parantez içindeki kod için kullanım nedir?

+2

tamamen emin değilim yapılmamış, ancak ilk adım ('{connectHOC = ......... = defaultSelectorFactory}'), birkaç değişken beyanları ile bir blok bir amacı değildir . Bir nesne, eşit işaretleri değil, sütunları kullanır. –

+1

Parametreler ve yıkım için varsayılan değerler birleşimidir. Şunlar da aynı anda SO'yu aynı anda kapsayan bir soruya sahip olmadığımızı gördüğümüze şaşkınlık duyuyoruz, ya bu ya da google'm bu kez başarısız oluyor. –

+1

[Bu kapalı] (http: // stackoverflow.com/questions/26578167/es6-object-destructuring-default-parameters), ancak tam bir dupe değil. [Ayrıca bu] (http://stackoverflow.com/questions/34275971/how-to-destructure-option-argument-with-all-default-values-in-es6). Her ikisi de burada neler olup bittiğini açıklıyorlar, ancak OP bilme açısından, "bu sözdizimi nedir" yaklaşımından ziyade, varsayılan değerleri tahmine parametrelere atamak istediklerini belirtiyorlar. –

cevap

5

Bu, ES2015 sözdizimi. İşlev bildiriminiz Destructuring assignment'u varsayılan bir değerle birleştirir.

Bu nesneyi kullanan bir temel bozma devir şudur: sol tarafta varsayılan değerleri ekleyebilirsiniz

var {a, b} = {a: "foo", b: "bar"}; 
 
console.log(a); // "foo" 
 
console.log(b); // "bar"

:

var {a = "foo", b = "bar"} = {}; 
 
console.log(a); // "foo" 
 
console.log(b); // "bar"

bir işlev bildirirken argümanlar isim, bunun aynı olacaktır kurucuların var ve nesneyle kullanmayın: elbette, bir tanımlayabilirsiniz,

function test({a = "foo", b = "bar"}){ 
 
    console.log(a + b); 
 
} 
 
test({}); // "foobar" 
 
test({b: "boo"}); // "fooboo"

Ve varsayılan değer, böylece işlevin herhangi bir argüman alması gerekmez.

function test({a = "foo", b = "bar"} = {}){ 
 
    console.log(a + b); 
 
} 
 
test(); // "foobar"

+0

Güzel ek örnekler. – msanford

3

Bu, yalnızca yapılandırmayı kullanarak varsayılan parametreler yapmanın bir yoludur. Varsayılan olarak önerdiğiniz son bit'e ihtiyacınız var.

örnekteki gibi bir destructuring assignment kullanan aşağıdaki düşünün: varsayılan eksik bu bir, karşı

function withDefault({parameter=something} = {}) { 
 
console.log(parameter) 
 
} 
 

 
let something = 1; 
 
withDefault();

ve bir hata atar ki:

function withoutDefault({parameter=something}) { 
 
console.log(parameter) 
 
} 
 

 
let something = 1; 
 
withoutDefault(); 
 
// It needs to be called as withoutDefault({}), withoutDefault(1) or 
 
// with some value, since the function signature doesn't define a default 
 
// in this case.