reactjs - Stöd för defaultProps är föråldrat men visas fortfarande i den formella dokumentationen
När jag använder min komponent på detta sätt i React 18.2:
const Component = ({prop=true}) => (<div></div>)
Jag får detta felmeddelande i konsolen:
Stöd för defaultProps kommer att tas bort från funktionskomponenter i en framtida större version. Använd istället standardparameterar i JavaScript.
Ändå ger dokumentationen på https://react.dev/learn/passing-props-to-a-component#specifying-a-default-value-for-a-prop specifikt det sättet:
function Avatar({ person, size = 100 }) {}
Vad är det rätta sättet så att konsolen inte skriker på mig?
Svar #1
Detta fel hänvisar faktiskt till användningen av detta API som vi hade tidigare i äldre versioner av React:
const Component = ({ prop }) => (<div></div>);
Component.defaultProps = {
prop: true,
};
Om du inte använder defaultProps och ändå får konsolvarningar, så finns det ett bibliotek i ditt projekt som använder detta API. Försök uppgradera biblioteket eller ersätt det med ett annat. Detta skulle lösa problemet.
Svar #2
Min kod var så här:
import React from 'react';
import SimpleText from './SimpleText';
import colors from '../../../styles/colors';
import { fontFamily } from '../../../styles/fonts';
import { useTheme } from '../../../hooks/useTheme';
const MessageText = props => {
const {
subtitleBold,
fontFamily: fontFamilyStyle,
color: colorStyle = colors.almost_black,
} = props;
const {
theme: {
text: {
message: { color },
},
},
} = useTheme();
return (
<SimpleText
fontFamily={fontFamilyStyle ?? fontFamily.openSansRegular}
color={colorStyle ?? color}
fontWeight={subtitleBold ? 'bold' : 'normal'}
{...props}
/>
);
};
MessageText.defaultProps = {
fontSize: 16,
color: colors.almost_black,
lineHeight: 24,
fontWeight: 'normal',
};
export default MessageText;
Meddelandet om defaultProps i konsolen är borta (ignorera att jag förbättrade andra detaljer) Se hur jag gjorde:
import React from 'react';
import SimpleText from './SimpleText';
import colors from '@styles/colors';
import { fontFamily } from '@styles/fonts';
import { useTheme } from '@hooks/useTheme';
type MessageTextProps = {
subtitleBold?: boolean;
lineHeight?: number;
fontFamily?: string;
color?: string;
fontSize?: number;
[key: string]: any;
};
const MessageText = ({
subtitleBold = false,
lineHeight = 24,
fontSize = 16,
fontFamily: fontFamilyStyle,
color: colorStyle = colors.almost_black,
...props
}: MessageTextProps) => {
const {
theme: {
text: {
message: { color },
},
},
} = useTheme();
return (
<SimpleText
fontFamily={fontFamilyStyle ?? fontFamily.openSansRegular}
color={colorStyle ?? color}
fontWeight={subtitleBold ? 'bold' : 'normal'}
lineHeight={lineHeight}
fontSize={fontSize}
{...props}
/>
);
};
export default MessageText;
