我有一个UIFlatLıst组件,我正在从父组件传递数据。当我调用uiflatlist组件时,由于备忘,该组件仅运行一个。但是在每个数据内部都有平面列表组件renderItem和keyExtractor函数调用两次。为什么会这样呢?
const UIFlatLıst = props => {
const flatListRef = useRef();
renderRow = (item, index) => {
console.log('renderRıw run' + index);
let renderItem;
switch (item.type) {
case ComponentTypes.UIText:
renderItem = <UIText TextItem={item} />;
break;
case ComponentTypes.UICarousel:
renderItem = (
<Box p={10}>
<Box flexDirection="row" alignItems="center">
<ScrollView horizontal={true}>
<Combo
Click={props.ButtonClick}
CarouselItem={item.component}
IsDisabled={item.InitiallyDisabled}
/>
</ScrollView>
</Box>
</Box>
);
break;
default:
break;
}
return renderItem;
};
console.log('uiflatlistRndered');
return (
<FlatList
ml={10}
data={props.MessageList}
keyExtractor={(item, index) => item.component.UIId + index.toString()}
ref={flatListRef}
renderItem={({item, index}) => renderRow(item,index)}
onContentSizeChange={() =>
flatListRef.current.scrollToEnd({animated: true})
}
onLayout={() => flatListRef.current.scrollToEnd({animated: true})}
ListFooterComponent={
props.Isloading && (
<Box alignSelf="flex-start">
<Loader />
</Box>
)
}
/>
);
};
export default React.memo(UIFlatLıst, areEqual);
function areEqual(prevProps, nextProps) {
if (prevProps.MessageList === nextProps.MessageList) {
return true;
}
}
这是输出
renderRıwrun1
renderRıwrun2
renderRıwrun3
renderRıwrun4
renderRıwrun5
UIText.js:9个文本运行
UIInput.js:15个UIInput运行。
renderRıwrun0
renderRıwrun1
renderRıwrun2
renderRıwrun3
renderRıwrun4
renderRıwrun5