警告:页面:在未来的主要版本中,将对 defaultProps 的支持将从功能组件中删除。请改用 JavaScript 默认参数。
这是我的 Page.js 文件
import { Dimensions, Text, View } from 'react-native';
import PropTypes from 'prop-types';
import React from 'react';
import { useTranslation } from 'react-i18next';
const Page = ({
isLight,
image,
title,
subtitle,
width,
height,
containerStyles,
imageContainerStyles,
allowFontScaling,
titleStyles,
subTitleStyles,
}) => {
let titleElement = title;
const {t} = useTranslation()
if (typeof title === 'string' || title instanceof String) {
titleElement = (
<View style={styles.padding}>
<Text allowFontScaling={allowFontScaling} style={[styles.title, isLight ? styles.titleLight : {}, titleStyles]}>
{title}
</Text>
</View>
);
}
let subtitleElement = subtitle;
if (typeof subtitle === 'string' || subtitle instanceof String) {
subtitleElement = (
<View style={styles.padding}>
<Text allowFontScaling={allowFontScaling} style={[styles.subtitle, isLight ? styles.subtitleLight : {}, subTitleStyles]}>
{t(subtitle)}
</Text>
</View>
);
}
return (
<View style={[styles.container, containerStyles, { width, height }]}>
<View style={[styles.imageContainer, imageContainerStyles]}>{image}</View>
{titleElement}
{subtitleElement}
</View>
);
};
Page.propTypes = {
isLight: PropTypes.bool.isRequired,
image: PropTypes.element.isRequired,
containerStyles: PropTypes.shape({
style: PropTypes.any,
}),
imageContainerStyles: PropTypes.shape({
style: PropTypes.any,
}),
title: PropTypes.oneOfType([PropTypes.string, PropTypes.element]).isRequired,
subtitle: PropTypes.oneOfType([PropTypes.string, PropTypes.element])
.isRequired,
allowFontScaling: PropTypes.bool,
titleStyles: PropTypes.shape({
style: PropTypes.any,
}),
subTitleStyles: PropTypes.shape({
style: PropTypes.any,
}),
width: PropTypes.number.isRequired,
height: PropTypes.number.isRequired,
};
Page.defaultProps = {
containerStyles: null,
imageContainerStyles: null,
allowFontScaling: true,
titleStyles: null,
subTitleStyles: null,
};
const { width, height } = Dimensions.get('window');
const potrait = height > width;
const styles = {
container: {
flex: 1,
flexDirection: 'column',
alignItems: 'center',
// justifyContent: potrait ? 'center' : 'flex-start',
paddingTop: potrait ? 0 : 10,
},
imageContainer: {
flex: 0,
paddingBottom: potrait ? 60 : 10,
alignItems: 'center',
width: '100%',
},
padding: {
paddingHorizontal: 10,
},
title: {
textAlign: 'center',
fontSize: 26,
color: '#fff',
paddingBottom: 15,
},
titleLight: {
color: '#000',
},
subtitle: {
textAlign: 'center',
fontSize: 16,
color: 'rgba(255, 255, 255, 0.7)',
},
subtitleLight: {
color: 'rgba(0, 0, 0, 0.7)',
},
};
export default Page;
package.json 文件
"react": "18.3.1",
"react-i18next": "^15.0.1",
"react-native": "0.75.1",
该警告是自我描述的。您收到警告是因为您使用了
Page.defaultProps
,它将在未来的主要版本发布中删除。如果你想摆脱警告,你可以摆脱“Page.defaultProps”并为你的道具设置默认值。
import { Dimensions, Text, View } from 'react-native';
import PropTypes from 'prop-types';
import React from 'react';
import { useTranslation } from 'react-i18next';
const Page = ({
isLight,
image,
title,
subtitle,
width,
height,
containerStyles = null,
imageContainerStyles = null,
allowFontScaling = true,
titleStyles = null,
subTitleStyles = null,
}) => {
let titleElement = title;
const {t} = useTranslation()
if (typeof title === 'string' || title instanceof String) {
titleElement = (
<View style={styles.padding}>
<Text allowFontScaling={allowFontScaling} style={[styles.title, isLight ? styles.titleLight : {}, titleStyles]}>
{title}
</Text>
</View>
);
}
let subtitleElement = subtitle;
if (typeof subtitle === 'string' || subtitle instanceof String) {
subtitleElement = (
<View style={styles.padding}>
<Text allowFontScaling={allowFontScaling} style={[styles.subtitle, isLight ? styles.subtitleLight : {}, subTitleStyles]}>
{t(subtitle)}
</Text>
</View>
);
}
return (
<View style={[styles.container, containerStyles, { width, height }]}>
<View style={[styles.imageContainer, imageContainerStyles]}>{image}</View>
{titleElement}
{subtitleElement}
</View>
);
};
Page.propTypes = {
isLight: PropTypes.bool.isRequired,
image: PropTypes.element.isRequired,
containerStyles: PropTypes.shape({
style: PropTypes.any,
}),
imageContainerStyles: PropTypes.shape({
style: PropTypes.any,
}),
title: PropTypes.oneOfType([PropTypes.string, PropTypes.element]).isRequired,
subtitle: PropTypes.oneOfType([PropTypes.string, PropTypes.element])
.isRequired,
allowFontScaling: PropTypes.bool,
titleStyles: PropTypes.shape({
style: PropTypes.any,
}),
subTitleStyles: PropTypes.shape({
style: PropTypes.any,
}),
width: PropTypes.number.isRequired,
height: PropTypes.number.isRequired,
};
const { width, height } = Dimensions.get('window');
const potrait = height > width;
const styles = {
container: {
flex: 1,
flexDirection: 'column',
alignItems: 'center',
// justifyContent: potrait ? 'center' : 'flex-start',
paddingTop: potrait ? 0 : 10,
},
imageContainer: {
flex: 0,
paddingBottom: potrait ? 60 : 10,
alignItems: 'center',
width: '100%',
},
padding: {
paddingHorizontal: 10,
},
title: {
textAlign: 'center',
fontSize: 26,
color: '#fff',
paddingBottom: 15,
},
titleLight: {
color: '#000',
},
subtitle: {
textAlign: 'center',
fontSize: 16,
color: 'rgba(255, 255, 255, 0.7)',
},
subtitleLight: {
color: 'rgba(0, 0, 0, 0.7)',
},
};
export default Page;