首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用可自定义的道具对本地FlatList作出反应(良好实践)

使用可自定义的道具对本地FlatList作出反应(良好实践)
EN

Stack Overflow用户
提问于 2021-06-16 23:54:46
回答 1查看 403关注 0票数 2

这个问题是关于在泛化组件时的良好实践和模式。

我正在实现一个FlatList包装组件"UserList",它呈现"UserListItem“。

我的想法是使它变得灵活,允许将诸如"keyExtractor“或"renderItem”这样的定制道具作为可选的道具。如果道具未被传递,则列表将使用自己的方法。

因此,我有以下几点:

代码语言:javascript
复制
const UserList = memo(
  (props) => {
     const {
        data,
        keyExtractor,
        listKey,
        ListEmptyComponent,
        initialNumToRender,
        onRefresh,
        onEndReached,
     } = props;


     const _keyExtractor = useCallback((...) => ..., []);

     const _renderItem = useCallback((...) => ..., []);

     ...

     return (
        <FlatList
           ...
           keyExtractor={keyExtractor || _keyExtractor}
           renderItem={renderItem || _renderItem} 
           ...
           // some default configurations (updateCellsBatchingPeriod, windowSize, ...) for this type of component
        />    
  }
  (prevProps, nextProps) => { 
     ...
  }
);

像我一样实现列表和使用defaultProps来定义默认的keyExtractor和renderItem之间有什么区别吗?

我是说,就像这样:

代码语言:javascript
复制
UserList.defaultProps = {
  keyExtractor = (...) => ...,
  renderItem = (...) => ...
};

避免组件内部的定义。

此外,您是否考虑让可重用的FlatLists包装组件成为一种良好的实践?

制作另一个具有自己的FlatList和keyExtractor (避免对当前UserList组件的泛化)的包装组件是否更专业、更容易阅读?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-17 00:19:04

在函数组件中使用defaultProps并不经常(如果有的话),因为您可以在函数签名上直接定义默认值/回退值。使用props对象的析构赋值很容易。

代码语言:javascript
复制
const UserList = memo(
  ({
    data = [],
    keyExtractor = (...) => ...,
    renderItem = (...) => ...,
    listKey,
    ListEmptyComponent,
    initialNumToRender,
    onRefresh,
    onEndReached,
  }) => {
     ...

     return (
        <FlatList
           ...
           keyExtractor={keyExtractor}
           renderItem={renderItem} 
           ...
           // some default configurations (updateCellsBatchingPeriod, 
           //   windowSize, ...) for this type of component
        />    
  }
  (prevProps, nextProps) => { 
     ...
  }
);

此外,您是否考虑让可重用的

包装组件成为一种良好的实践?

React是为使用组合而设计的,在这里封装和组合这些默认配置似乎是一种有效的使用。不过,我会说,您封装的更多组合和配置开始限制组件的通用性/可重用性。换句话说,它开始转向更具体的用例。

是否更专业,更容易阅读,制作另一个具有自己的renderItem和keyExtractor的FlatList包装组件(避免了当前UserList组件的泛化)?

我不认为仅仅为了一些支持就需要或使用另一个平面列表组件,大多数平面列表组件API是足够通用的。我认为将自定义renderItemkeyExtractor函数定义为一组重要的实用程序会更有意义,如果您想减少代码复制,这些实用程序可以使用(而不是每次都定义)。

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68011289

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档