Możesz użyć React.cloneElement
, lepiej wiedzieć, jak to działa, zanim zaczniesz używać go w swojej aplikacji. Został wprowadzony React v0.13
, czytaj dalej, aby uzyskać więcej informacji, więc coś z tą pracą dla Ciebie:
<div>{React.cloneElement(this.props.children, {...this.props})}</div>
Przynieś wiersze z dokumentacji React, aby zrozumieć, jak to wszystko działa i jak możesz z nich skorzystać:
W React v0.13 RC2 wprowadzimy nowy API, podobny do React.addons.cloneWithProps, z tym podpisem:
React.cloneElement(element, props, ...children);
W przeciwieństwie do cloneWithProps, ta nowa funkcja nie ma żadnego wbudowanego magicznego zachowania do łączenia stylu i nazwy klasy z tego samego powodu, dla którego nie mamy tej funkcji z transferPropsTo. Nikt nie jest pewien, czym dokładnie jest pełna lista magicznych rzeczy, co utrudnia rozumowanie kodu i ponowne użycie, gdy styl ma inną sygnaturę (np. W nadchodzącym React Native).
React.cloneElement jest prawie równoważny z:
<element.type {...element.props} {...props}>{children}</element.type>
Jednak w przeciwieństwie do JSX i cloneWithProps, zachowuje również ref. Oznacza to, że jeśli dostaniesz dziecko z referencją, nie przypadkowo okradniesz go od swojego przodka. Otrzymasz ten sam numer referencyjny dołączony do nowego elementu.
Jednym z powszechnych schematów jest mapowanie dzieci i dodawanie nowego rekwizytu. Zgłoszono wiele problemów związanych z utratą referencji przez cloneWithProps, co utrudnia rozumowanie kodu. Teraz stosowanie tego samego wzorca z cloneElement będzie działać zgodnie z oczekiwaniami. Na przykład:
var newChildren = React.Children.map(this.props.children, function(child) {
return React.cloneElement(child, { foo: true })
});
Uwaga: React.cloneElement (child, {ref: 'newRef'}) zastępuje odwołanie, więc dwoje rodziców nadal nie może mieć odwołania do tego samego dziecka, chyba że użyjesz wywołań zwrotnych.
To była kluczowa cecha, aby dostać się do React 0.13, ponieważ rekwizyty są teraz niezmienne. Ścieżką aktualizacji jest często klonowanie elementu, ale może to spowodować utratę referencji. Dlatego potrzebowaliśmy tutaj ładniejszej ścieżki aktualizacji. Gdy aktualizowaliśmy strony na Facebooku, zdaliśmy sobie sprawę, że potrzebujemy tej metody. Otrzymaliśmy takie same opinie od społeczności. Dlatego postanowiliśmy zrobić kolejny RC przed ostatecznym wydaniem, aby upewnić się, że dostaniemy to.
Planujemy ostatecznie wycofać React.addons.cloneWithProps. Jeszcze tego nie robimy, ale jest to dobra okazja, aby zacząć myśleć o własnych zastosowaniach i rozważyć użycie React.cloneElement. Przed faktycznym usunięciem z pewnością wyślemy informację o wycofaniu, więc nie jest konieczne natychmiastowe działanie.
więcej tutaj ...