React Native HooksFlatLıst每次渲染两次调用renderItem

时间:2020-05-03 13:17:47

标签: reactjs react-hooks react-native-flatlist

我有一个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;
        }
      }

这是输出

  1. renderRıwrun0
  2. renderRıwrun1

  3. renderRıwrun2

  4. renderRıwrun3

  5. renderRıwrun4

  6. renderRıwrun5

  7. UIText.js:9个文本运行

  8. UIInput.js:15个UIInput运行。

  9. renderRıwrun0

  10. renderRıwrun1

  11. renderRıwrun2

  12. renderRıwrun3

  13. renderRıwrun4

  14. renderRıwrun5

0 个答案:

没有答案