React: الدعائم المطلوبة المتوفرة مع cloneElement لا تزال تعرض تحذيرًا في وحدة التحكم

تم إنشاؤها على ٢٧ يوليو ٢٠١٥  ·  3تعليقات  ·  مصدر: facebook/react

لقد قدمت مثالًا لذلك يسهل فهمه ، ولكن يتم عرض تحذير بشكل أساسي في وحدة التحكم بسبب "فقدان الدعائم المطلوبة".

يتم إعطاء الدعائم للعنصر بـ 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
};

التعليق الأكثر فائدة

لا أعرف ما هي حالة الاستخدام الحقيقية الخاصة بك tleunen ، لكنني عثرت على هذه المشكلة أثناء تنفيذ مكون قابل لإعادة الاستخدام يتحمل مسؤولية تمرير الدعائم إلى أطفاله:

ReactDOM.render(
   <NumberSelector>
    <ComponentRequiringTheNumber />
  </NumberSelector>
)

في النهاية ، عملت على حل المشكلة مع ما وجدته حلاً أكثر أناقة:

ReactDOM.render(
   <NumberSelector>
    {({number}) => <ComponentRequiringTheNumber number={number} />}
  </NumberSelector>
)

يعجبني كثيرًا نظرًا لأن تبعية ComponentRequiringTheNumber واضحة ، ودور NumberSelector يصبح واضحًا. وبهذه الطريقة ، لا يتم تقييم الخاصيات المعطاة للمكون المتداخل إلا عندما تكون ذات صلة.

تُطبق على كمانتك: https://jsfiddle.net/ap1e9rk3/1/

ال 3 كومينتر

هذا متعمد. يؤدي التحقق من صحة الدعائم في وقت إنشاء العنصر إلى ظهور المزيد من الأخطاء المفيدة. كما أنه يطابق بشكل أوثق سلوك أنظمة النوع الثابت مثل 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/

هل كانت هذه الصفحة مفيدة؟
0 / 5 - 0 التقييمات