أنا أتبع مقتطف الشفرة من الكتاب React Quickly
.
ولا يمكنني تشغيل الكود بعد تجميعه عبر بابل.
الكود الخاص بي مثل:
class DateTimeNow extends React.Component{
render(){
let dateTimeNow = new Date();
return <span>Current date and time is {dateTimeNow}.</span>;
}
}
ReactDOM.render(
<DateTimeNow/>,
document.getElementById('content')
);
رسالة الخطأ التي أبلغ عنها المتصفح هي:
Uncaught Invariant Violation: Objects are not valid as a React child (found: Mon Oct 17 2016 09:12:00 GMT+0800 (CST)). If you meant to render a collection of children, use an array instead or wrap the object using createFragment(object) from the React add-ons. Check the render method of
DateTimeNow .
هل يمكنك المساعدة في الإجابة عن سبب حدوث خطأ؟
شكرا جزيلا لك!
هل ترغب في طلب _ ميزة _ أو الإبلاغ عن _ خطأ _؟
ما هو السلوك الحالي؟
رسالة الخطأ: Uncaught Invariant Violation: الكائنات غير صالحة كطفل تابع لـ React (تم العثور عليه: Mon Oct 17 2016 09:12:00 GMT + 0800 (CST)). إذا كنت تقصد تصيير مجموعة من العناصر الفرعية ، فاستخدم مصفوفة بدلاً من ذلك أو لف الكائن باستخدام createFragment (كائن) من إضافات React. تحقق من طريقة العرض DateTimeNow
.
إذا كان السلوك الحالي عبارة عن خطأ ، فالرجاء تقديم خطوات إعادة الإنتاج وإذا أمكن عرضًا توضيحيًا بسيطًا للمشكلة عبر https://jsfiddle.net أو ما شابه (نموذج: https://jsfiddle.net/reactjs/69z2wepo/).
ما هو السلوك المتوقع؟
تعرض علامة الامتداد الوقت الحالي
ما إصدارات React وأي متصفح / نظام تشغيل متأثر بهذه المشكلة؟
رد فعل 15.3.2
الإجابة المختصرة هي أنك تحتاج إلى استدعاء طريقة toString()
في متغير dateTimeNow ، لأنه تاريخ _ كائن_ ، وليس سلسلة. على سبيل المثال ، أحد "الكائنات" الذي تشير إليه رسالة الخطأ.
return <span>Current date and time is {dateTimeNow.toUTCString()}.</span>;
ومع ذلك ، فإن رسالة الخطأ محيرة في البداية لأنها تعرض التاريخ كسلسلة. على سبيل المثال ، إذا استبدلت {dateTimeNow}
بكائن مثل { {a: 1} }
، فستكون رسالة الخطأ أكثر منطقية:
Uncaught Error: Objects are not valid as a React child (found: object with keys {a}).
https://github.com/facebook/react/issues/7988#issuecomment -254148427 صحيح.
التواريخ عبارة عن كائنات في JS ، لكن إخراجك قد يحتوي فقط على عناصر وسلاسل وأرقام React. ستعمل تنسيق سلسلة بأي طريقة تشبه toString()
.
يمكنك العثور على قائمة بهذه الطرق على شبكة مطوري موزيلا .
هتافات!
لماذا لا تستطيع React استدعاء .toString()
لنا تلقائيًا باستيفاء سلسلة lá؟ الكثير من النفقات العامة؟
التعليق الأكثر فائدة
الإجابة المختصرة هي أنك تحتاج إلى استدعاء طريقة
toString()
في متغير dateTimeNow ، لأنه تاريخ _ كائن_ ، وليس سلسلة. على سبيل المثال ، أحد "الكائنات" الذي تشير إليه رسالة الخطأ.ومع ذلك ، فإن رسالة الخطأ محيرة في البداية لأنها تعرض التاريخ كسلسلة. على سبيل المثال ، إذا استبدلت
{dateTimeNow}
بكائن مثل{ {a: 1} }
، فستكون رسالة الخطأ أكثر منطقية: