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
}