Bunu kullanabilirsiniz React.cloneElement
, uygulamanızda kullanmaya başlamadan önce nasıl çalıştığını bilmek daha iyidir. Sunuldu React v0.13
, daha fazla bilgi için okumaya devam edin, bu yüzden sizin için bu çalışma ile birlikte bir şey:
<div>{React.cloneElement(this.props.children, {...this.props})}</div>
Tüm bunların nasıl çalıştığını ve bunlardan nasıl yararlanabileceğinizi anlamak için React belgelerindeki satırları getirin:
React v0.13 RC2'de, bu imza ile React.addons.cloneWithProps'a benzer yeni bir API tanıtacağız:
React.cloneElement(element, props, ...children);
CloneWithProps'ın aksine, bu yeni işlev stil ve className'i birleştirmek için herhangi bir sihirli yerleşik davranışa sahip değildir, aynı nedenle transferPropsTo'dan bu özelliğe sahip değiliz. Kimse sihirli şeylerin tam listesinin tam olarak ne olduğundan emin değil, bu da kod hakkında mantık oluşturmayı ve stilin farklı bir imzası olduğunda (örneğin, yaklaşan React Native'da) yeniden kullanılmasını zorlaştırıyor.
React.cloneElement neredeyse şuna eşittir:
<element.type {...element.props} {...props}>{children}</element.type>
Ancak, JSX ve cloneWithProps'ın aksine, ref'leri de korur. Bu, üzerinde ref olan bir çocuk alırsanız, yanlışlıkla atadan çalmayacağınız anlamına gelir. Aynı ref'yi yeni öğenize ekleyeceksiniz.
Yaygın bir model, çocuklarınızın haritasını çıkarmak ve yeni bir pervane eklemektir. CloneWithProps ref kaybetme hakkında bildirilen birçok sorun vardı, bu da kodunuz hakkında akıl yürütmeyi zorlaştırıyor. Şimdi cloneElement ile aynı kalıbı takip etmek beklendiği gibi çalışacaktır. Örneğin:
var newChildren = React.Children.map(this.props.children, function(child) {
return React.cloneElement(child, { foo: true })
});
Not: React.cloneElement (child, {ref: 'newRef'}) ref'yi geçersiz kılar, bu nedenle geri arama ref'leri kullanmadığınız sürece iki ebeveynin aynı çocuğa ref sahip olması mümkün değildir.
Sahne şimdi değişmez olduğu için React 0.13'e girmek için kritik bir özellikti. Yükseltme yolu genellikle öğeyi klonlamaktır, ancak bunu yaparak ref kaybedebilirsiniz. Bu nedenle, burada daha güzel bir yükseltme yoluna ihtiyacımız vardı. Facebook'ta çağrı sitelerini yeni sürüme geçirirken bu yönteme ihtiyacımız olduğunu fark ettik. Aynı geri bildirimi topluluktan aldık. Bu nedenle, son sürümden önce bunu aldığımızdan emin olmak için başka bir RC yapmaya karar verdik.
Sonunda React.addons.cloneWithProps'ı kullanımdan kaldırmayı planlıyoruz. Henüz yapmıyoruz, ancak bu kendi kullanımlarınızı düşünmeye başlamak ve bunun yerine React.cloneElement kullanmayı düşünmek için iyi bir fırsat. Gerçekten kaldırmadan önce kullanımdan kaldırma bildirimleri içeren bir sürüm göndereceğimizden emin olacağız, bu yüzden acil bir işlem gerekmez.
daha fazlası burada ...