React.memo 和打字稿
React.memo and typescript
我正在开发一个反应本机应用程序。我目前正在使用 Item 组件在平面列表中显示数据。但是编辑器给了我一个错误 React.memo 的第二个参数,如下所示。
类型 'boolean | undefined' 不能分配给类型 'boolean'。
类型 'undefined' 不可分配给类型 'boolean'。
const Item = React.memo(
({ icon, title }: any) => {
return (
<Box
flexDirection="row"
paddingHorizontal="l"
justifyContent="space-between"
alignItems="center"
style={{ marginTop: 35 }}
>
<Box flexDirection="row" alignItems="center" flex={1}>
{icon}
<Box marginLeft="l">
<Text variant="stackHeader">{title}</Text>
<Text
fontSize={15}
fontFamily="CrimsonRegular"
style={{ color: '#575757' }}
>
Last update: 03/06/2020
</Text>
</Box>
</Box>
<TouchableOpacity onPress={() => Clipboard.setString(title as string)}>
<FontAwesome5 name="copy" size={28} color="white" />
</TouchableOpacity>
</Box>
);
},
(prev, next) => { // error here
if (prev.title === next.title) {
return true;
}
}
);
实际上它期望布尔值是 return 所以这可能会有所帮助
(prev, next) => {
return prev.title === next.title;
}
(prev, next) => { // error here
if (prev.title === next.title) {
return true;
}
}
Typescript 需要此函数 return boolean
。但它只是有时会。如果不满足条件,则不会执行任何 return 语句,这将导致函数 returning undefined
。即使 undefined
是假的,它也是 而不是 false
.
的布尔值
因此,要解决此问题,您需要使您的函数在所有条件分支上始终 return 为布尔值。
例如,您可以在 returns false
.
的条件中添加一个 else 子句
(prev, next) => {
if (prev.title === next.title) {
return true;
} else {
return false;
}
}
应该简化为:
(prev, next) => {
return prev.title === next.title
}
我正在开发一个反应本机应用程序。我目前正在使用 Item 组件在平面列表中显示数据。但是编辑器给了我一个错误 React.memo 的第二个参数,如下所示。
类型 'boolean | undefined' 不能分配给类型 'boolean'。
类型 'undefined' 不可分配给类型 'boolean'。
const Item = React.memo(
({ icon, title }: any) => {
return (
<Box
flexDirection="row"
paddingHorizontal="l"
justifyContent="space-between"
alignItems="center"
style={{ marginTop: 35 }}
>
<Box flexDirection="row" alignItems="center" flex={1}>
{icon}
<Box marginLeft="l">
<Text variant="stackHeader">{title}</Text>
<Text
fontSize={15}
fontFamily="CrimsonRegular"
style={{ color: '#575757' }}
>
Last update: 03/06/2020
</Text>
</Box>
</Box>
<TouchableOpacity onPress={() => Clipboard.setString(title as string)}>
<FontAwesome5 name="copy" size={28} color="white" />
</TouchableOpacity>
</Box>
);
},
(prev, next) => { // error here
if (prev.title === next.title) {
return true;
}
}
);
实际上它期望布尔值是 return 所以这可能会有所帮助
(prev, next) => {
return prev.title === next.title;
}
(prev, next) => { // error here
if (prev.title === next.title) {
return true;
}
}
Typescript 需要此函数 return boolean
。但它只是有时会。如果不满足条件,则不会执行任何 return 语句,这将导致函数 returning undefined
。即使 undefined
是假的,它也是 而不是 false
.
因此,要解决此问题,您需要使您的函数在所有条件分支上始终 return 为布尔值。
例如,您可以在 returns false
.
(prev, next) => {
if (prev.title === next.title) {
return true;
} else {
return false;
}
}
应该简化为:
(prev, next) => {
return prev.title === next.title
}