لقد قدمت مثالًا لذلك يسهل فهمه ، ولكن يتم عرض تحذير بشكل أساسي في وحدة التحكم بسبب "فقدان الدعائم المطلوبة".
يتم إعطاء الدعائم للعنصر بـ React.cloneElement
لذلك لم أكن أتوقع تلقي تحذير من الدعائم المفقودة. أتفهم أن هذا يمكن أن يكون حالة استثنائية على الرغم من ...
https://jsfiddle.net/kdsvgbzu/1/
<A name="name" value="value">
<B></B>
</A>
class A extends React.Component {
render() {
return (
<div>
{React.Children.map(this.props.children, function(child) {
return React.cloneElement(child, {
name: this.props.name,
value: this.props.value
});
}, this)}
</div>
);
}
}
A.propTypes = {
name: PropTypes.string.isRequired,
value: PropTypes.string.isRequired
};
class B extends React.Component {
render() {
return <span>{this.props.name} : {this.props.value}</span>;
}
}
B.propTypes = {
name: PropTypes.string.isRequired,
value: PropTypes.string.isRequired
};
هذا متعمد. يؤدي التحقق من صحة الدعائم في وقت إنشاء العنصر إلى ظهور المزيد من الأخطاء المفيدة. كما أنه يطابق بشكل أوثق سلوك أنظمة النوع الثابت مثل Flow. الأفضل في الوقت الحالي هو ببساطة تحديد هذه الدعائم اختيارية. قد نقدم أيضًا ميزة في المستقبل تسمى السياق والتي ستوفر طريقة أخرى مدعومة لتمرير الدعائم من أحد الوالدين مثل A إلى طفل مثل B.
هذا ما اعتقدته. شكرا spicyj
لا أعرف ما هي حالة الاستخدام الحقيقية الخاصة بك tleunen ، لكنني عثرت على هذه المشكلة أثناء تنفيذ مكون قابل لإعادة الاستخدام يتحمل مسؤولية تمرير الدعائم إلى أطفاله:
ReactDOM.render(
<NumberSelector>
<ComponentRequiringTheNumber />
</NumberSelector>
)
في النهاية ، عملت على حل المشكلة مع ما وجدته حلاً أكثر أناقة:
ReactDOM.render(
<NumberSelector>
{({number}) => <ComponentRequiringTheNumber number={number} />}
</NumberSelector>
)
يعجبني كثيرًا نظرًا لأن تبعية ComponentRequiringTheNumber
واضحة ، ودور NumberSelector
يصبح واضحًا. وبهذه الطريقة ، لا يتم تقييم الخاصيات المعطاة للمكون المتداخل إلا عندما تكون ذات صلة.
تُطبق على كمانتك: https://jsfiddle.net/ap1e9rk3/1/
التعليق الأكثر فائدة
لا أعرف ما هي حالة الاستخدام الحقيقية الخاصة بك tleunen ، لكنني عثرت على هذه المشكلة أثناء تنفيذ مكون قابل لإعادة الاستخدام يتحمل مسؤولية تمرير الدعائم إلى أطفاله:
في النهاية ، عملت على حل المشكلة مع ما وجدته حلاً أكثر أناقة:
يعجبني كثيرًا نظرًا لأن تبعية
ComponentRequiringTheNumber
واضحة ، ودورNumberSelector
يصبح واضحًا. وبهذه الطريقة ، لا يتم تقييم الخاصيات المعطاة للمكون المتداخل إلا عندما تكون ذات صلة.تُطبق على كمانتك: https://jsfiddle.net/ap1e9rk3/1/