PropTypes-ı Çağırmamaq Xəbərdarlığı
Qeyd:
React v15.5-dən başlayaraq
React.PropTypes
fərqli paketə köçürülüb. Əvəzinəprop-types
kitabxanasını yükləyin.Köhnə PropTypes çağırışlarını yeni kitabxana çağırışlarına avtomatik çevirmək üçün codemod skriptindən istifadə edə bilərsiniz.
React-in gələcək əsas versiyalarında PropTypes validasiyalarını tətbiq edən kodlar produksiyadan silinəcək. Bu baş verdikdə, PropType validasiya funksiyalarını əl ilə çağıran kodlar produksiya zamanı silinməyib xəta yaradacaq.
PropTypes-ı təyin ətmək hələdə mümkündür
PropTypes-ın normal istifadəsi hələ də dəstəklənir:
Button.propTypes = {
highlighted: PropTypes.bool
};
Burada heç nə dəyişmir.
PropTypes-ı birbaşa çağırmayın
React komponentlərinin annotasiya edilməsindən əlavə işlər üçün PropTypes-ın işlədilməsi artıq dəstəklənmir:
var apiShape = PropTypes.shape({
body: PropTypes.object,
statusCode: PropTypes.number.isRequired
}).isRequired;
// Dəstəklənmir!
var error = apiShape(json, 'response');
Əgər sizə PropTypes-ı bu formada işlətmək lazımdırsa PropTypes-ın forkunu yaratmağı (bu iki paket kimi) tövsiyə edirik.
Bu xəbərdarlığı düzəltmədikdə React 16-da yazılmış applikasiya produksiyada sınacaq.
PropTypes-ı birbaşa çağırmadıqda bu xəbərdarlığı görürsünüzsə
Xəbərdarlıqdan yaranan stək izini yoxlayın. Siz bu formada PropTypes-ı birbaşa çağıran komponenti tapacaqsınız. Adətən, bu xəbədarlıq React-in PropTypes kitabxanasını əhatə edən 3-cü tərəfin yaratdığı PropTypes kitabxanasından yarana bilər. Məsələn:
Button.propTypes = {
highlighted: ThirdPartyPropTypes.deprecated(
PropTypes.bool,
'Use `active` prop instead'
)
}
Bu ssenaridə ThirdPartyPropTypes.deprecated
funksiyası PropTypes.bool
funksiyasını çağırır. Bu pattern özlüyündə normaldır. Lakin bu pattern səhv müsbətin yaranması ilə nəticələnə bilər. Çünki React, PropTypes-ı birbaşa çağırdığınızı fikirləşir. Sonrakı bölmədə, ThirdPartyPropTypes
kimi kitabxananın bu problemi necə düzəldəcəyini başa salacağıq. Əgər bu kitabxana sizə məxsus deyilsə kitabxana yaradıcısını bu problemi düzəltməsi üçün məlumatlandırın.
3-cü tərəfin PropTypes kitabxanasında səhv müsbətin düzəlişi
Əgər 3-cü tərəfin PropTypes kitabxanasının yaradıcısınızsa və istifadəçilərə mövcud React PropTypes-ı əhatə etməyə imkan yaradırsınızsa, istifadəçilər sizin kitabxananızı işlətdikdə bu xəbərdarlığı görə bilərlər. Bu xəbərdarlıq React-in əl ilə çağrılan PropTypes çağırışlarını aşkar etmək üçün göndərdiyi sonuncu “gizli” arqumenti görməməsindən baş verir.
Bu problemi aşağıdakı formada düzəldə bilərsiniz. Biz react-bootstrap/react-prop-types paketindən deprecated
funksiyasını misal kimi gətirəcəyik. Cari tətbiqdə yalnız props
, propName
və componentName
arqumentləri göndərilir:
export default function deprecated(propType, explanation) {
return function validate(props, propName, componentName) {
if (props[propName] != null) {
const message = `"${propName}" property of "${componentName}" has been deprecated.\n${explanation}`;
if (!warned[message]) {
warning(false, message);
warned[message] = true;
}
}
return propType(props, propName, componentName);
};
}
Səhv müsbəti düzəltmək üçün PropTypes-a bütün arqumentləri göndərdiyinizdən əmin olun. Bunu ES6-ın ...rest
sintaksisi ilə asan formada tətbiq etmək mümkündür:
export default function deprecated(propType, explanation) {
return function validate(props, propName, componentName, ...rest) { // ...rest-ə fikir verin
if (props[propName] != null) {
const message = `"${propName}" property of "${componentName}" has been deprecated.\n${explanation}`;
if (!warned[message]) {
warning(false, message);
warned[message] = true;
}
}
return propType(props, propName, componentName, ...rest); // və burada
};
}
Bu arqumentlərin əlavəsi xəbərdarlığı susduracaq.