ඔබට භාවිතා කළ හැකිය React.cloneElement
, ඔබේ යෙදුම තුළ එය භාවිතා කිරීමට පෙර එය ක්රියාත්මක වන්නේ කෙසේදැයි දැන ගැනීම වඩා හොඳය. එය හඳුන්වා දී ඇත React v0.13
, වැඩි විස්තර සඳහා කියවන්න, එබැවින් මෙම කාර්යය සමඟ ඔබ වෙනුවෙන් යමක්:
<div>{React.cloneElement(this.props.children, {...this.props})}</div>
එබැවින් එය සියල්ල ක්රියාත්මක වන්නේ කෙසේද සහ ඔබට ඒවා භාවිතා කළ හැක්කේ කෙසේද යන්න තේරුම් ගැනීමට ප්රතික්රියා ලේඛනයේ රේඛා ගෙන එන්න:
ප්රතික්රියා v0.13 RC2 හි දී අපි මෙම අත්සන සමඟ React.addons.cloneWithProps හා සමාන නව API එකක් හඳුන්වා දෙන්නෙමු:
React.cloneElement(element, props, ...children);
ක්ලෝන විත්ප්රොප්ස් මෙන් නොව, මෙම නව ශ්රිතයට ශෛලිය හා පංතියේ නම ඒකාබද්ධ කිරීම සඳහා කිසිදු ඉන්ද්රජාලික හැසිරීමක් නොමැත. එම හේතුව නිසා අපට ට්රාන්ස්ෆර්ප්රොප්ටෝ වෙතින් එම අංගය නොමැත. මැජික් දේවල් පිළිබඳ සම්පූර්ණ ලැයිස්තුව හරියටම කුමක්දැයි කිසිවෙකුට විශ්වාස නැත, එමඟින් කේතය ගැන තර්ක කිරීම දුෂ්කර වන අතර ශෛලියට වෙනස් අත්සනක් ඇති විට නැවත භාවිතා කිරීමට අපහසු වේ (උදා: එළඹෙන ප්රතික්රියා ස්වදේශික).
React.cloneElement බොහෝ දුරට සමාන වේ:
<element.type {...element.props} {...props}>{children}</element.type>
කෙසේ වෙතත්, JSX සහ cloneWithProps මෙන් නොව, එය refs ද ආරක්ෂා කරයි. මෙයින් අදහස් කරන්නේ ඔබ එය මත යොමු වූ දරුවෙකු ලබා ගන්නේ නම්, ඔබ එය ඔබේ මුතුන්මිත්තන්ගෙන් අහම්බෙන් සොරකම් නොකරන බවයි. ඔබගේ නව අංගයට අමුණා ඇති එකම ref එක ඔබට ලැබෙනු ඇත.
එක් පොදු රටාවක් නම් ඔබේ දරුවන් සිතියම් ගත කර නව මුක්කු එකතු කිරීමයි. ක්ලෝන විත්ප්රොප්ස් වෙත යොමු වීම නැතිවීම පිළිබඳව බොහෝ ගැටලු වාර්තා වූ අතර, ඔබේ කේතය ගැන තර්ක කිරීම දුෂ්කර විය. දැන් ක්ලෝනඑලෙමන්ට් සමඟ එකම රටාව අනුගමනය කිරීම අපේක්ෂිත පරිදි ක්රියාත්මක වේ. උදාහරණයක් වශයෙන්:
var newChildren = React.Children.map(this.props.children, function(child) {
return React.cloneElement(child, { foo: true })
});
සටහන: React.cloneElement (ළමයා, {ref: 'newRef'}) ref එක ඉක්මවා යයි, එබැවින් ඔබ ඇමතුම්-යොමු කිරීම් භාවිතා නොකරන්නේ නම්, දෙමව්පියන් දෙදෙනෙකුට එකම දරුවාට යොමු වීමක් තවමත් කළ නොහැක.
මුක්කු දැන් වෙනස් නොවන බැවින් ප්රතික්රියා 0.13 වෙත පිවිසීමට මෙය තීරණාත්මක ලක්ෂණයකි. උත්ශ්රේණි කිරීමේ මාර්ගය බොහෝ විට මූලද්රව්යය ක්ලෝන කිරීම වේ, නමුත් එසේ කිරීමෙන් ඔබට ref අහිමි විය හැකිය. එමනිසා, අපට මෙහි වඩා හොඳ වැඩිදියුණු කිරීමේ මාර්ගයක් අවශ්ය විය. අපි ෆේස්බුක් හි ඇමතුම් අඩවි යාවත්කාලීන කරමින් සිටියදී අපට මෙම ක්රමය අවශ්ය බව වැටහුණි. අපට ප්රජාවෙන් එකම ප්රතිපෝෂණය ලැබුණි. එබැවින් අවසාන නිකුතුවට පෙර තවත් RC එකක් සෑදීමට අපි තීරණය කළෙමු.
අවසානයේදී React.addons.cloneWithProps ඉවත් කිරීමට අපි සැලසුම් කරමු. අපි තවම එය කරන්නේ නැත, නමුත් මෙය ඔබේම භාවිතයන් ගැන සිතීම ආරම්භ කිරීමට හොඳ අවස්ථාවක් වන අතර ඒ වෙනුවට React.cloneElement භාවිතා කිරීම ගැන සලකා බලන්න. අපි එය ඉවත් කිරීමට පෙර ක්ෂය කිරීමේ දැන්වීම් සහිත නිකුතුවක් යැවීමට වග බලා ගන්නෙමු, එබැවින් ක්ෂණික ක්රියාමාර්ගයක් අවශ්ය නොවේ.
තවත් මෙහි ...