을 사용할 수 있습니다 React.cloneElement
. 애플리케이션에서 사용하기 전에 작동 방식을 아는 것이 좋습니다. 에 소개되어 React v0.13
있으며 자세한 정보는 다음을 참조하십시오.
<div>{React.cloneElement(this.props.children, {...this.props})}</div>
따라서 React 문서의 라인을 가져 와서 모든 것이 어떻게 작동하고 어떻게 사용할 수 있는지 이해하십시오.
React v0.13 RC2에서는 React.addons.cloneWithProps와 유사한이 API를 사용하여 새로운 API를 소개합니다.
React.cloneElement(element, props, ...children);
cloneWithProps와 달리이 새로운 함수에는 transferPropsTo에 해당 기능이없는 것과 같은 이유로 스타일과 className을 병합하기위한 마법의 내장 동작이 없습니다. 마술의 전체 목록이 정확히 무엇인지 확실하지 않은 사람은 아무도 코드에 대해 추론하기가 어렵고 스타일에 다른 서명이있을 때 재사용하기가 어렵습니다 (예 : 다가오는 React Native).
React.cloneElement는 다음과 거의 같습니다.
<element.type {...element.props} {...props}>{children}</element.type>
그러나 JSX 및 cloneWithProps와 달리 심판도 보존합니다. 이것은 당신이 그것에 심판을 가진 아이를 얻는다면, 실수로 조상으로부터 아이를 훔치지 않을 것임을 의미합니다. 새 요소에 동일한 참조가 첨부됩니다.
일반적인 패턴 중 하나는 자녀를지도에 표시하고 새로운 소품을 추가하는 것입니다. cloneWithProps가 심판을 잃어버린 것에 대해 많은 문제 가보고되어 코드를 추론하기가 더 어려워졌습니다. 이제 cloneElement와 동일한 패턴을 따르는 것이 예상대로 작동합니다. 예를 들면 다음과 같습니다.
var newChildren = React.Children.map(this.props.children, function(child) {
return React.cloneElement(child, { foo: true })
});
참고 : React.cloneElement (child, {ref : 'newRef'}) 참조를 재정의하므로 콜백 참조를 사용하지 않으면 두 부모가 동일한 자식에 대한 참조를 가질 수 없습니다.
소품은 이제 불변이기 때문에 이것은 React 0.13에 들어가는 중요한 기능이었습니다. 업그레이드 경로는 종종 요소를 복제하는 것이지만 그렇게하면 심판을 잃을 수 있습니다. 따라서 더 나은 업그레이드 경로가 필요했습니다. Facebook에서 콜 사이트를 업그레이드 할 때이 방법이 필요하다는 것을 깨달았습니다. 우리는 커뮤니티로부터 동일한 피드백을 받았습니다. 따라서 우리는 최종 출시 전에 다른 RC를 만들어 결정했습니다.
결국 React.addons.cloneWithProps를 더 이상 사용하지 않을 계획입니다. 아직 수행하지는 않았지만 이것은 자신의 용도에 대해 생각하고 대신 React.cloneElement를 사용하는 것을 고려할 수있는 좋은 기회입니다. 실제로 제거하기 전에 사용 중단 알림이 포함 된 릴리스를 제공하므로 즉각적인 조치가 필요하지 않습니다.
더 여기에 ...