如何在 React 中构建通用列表组件

How to build a generic list component in React

我正在构建呈现 4 个列表的用户配置文件:

  1. 评论
  2. 已保存的帖子。
  3. 创建的帖子
  4. 活跃帖子。

2-4 是呈现相同组件的列表,1 是呈现不同组件的列表 - ReviewCard。

据我所知,有一些方法可以使通用组件按类型或类似方式呈现组件列表。 每个列表也有它自己的状态和其他子组件,例如评论中的星容器,而其他组件不存在。 现在我的代码非常混乱:

    useEffect(() => {
        if (type === 'reviews') {
            fetchReviews()
        }
        dispatch(fetchNewRoom())
    }, [])

    useEffect(() => {
        setInitialMessages(messages?.slice(0, 3))
    }, [messages])

    useEffect(() => {
        setInitialRooms(rooms?.slice(0, 3))
    }, [rooms])

房间、评论和消息是我要在个人资料上呈现的 3 个列表。我确定有更好的做法。 讨论想法会很棒。 感谢您的帮助

在您的用例中,有四个列表可以在容器内呈现,其中容器将具有列表和通用配置。如果配置不是常量,则传递道具并相应地处理它。下面是代码片段。

//下面是列表容器

const ListContainer = (props) => {
  const { listData } = props
  const getListItem = (type) => {
       switch(type) {
         case 'review':
            return <review/>
         case 'spost'
            return <spost/>
         case 'cpost'
            return <cpost/>
         case 'apost'
            return <apost/>
         default:
            return null;
       }
  }
  return (
      <div>
        {listData.map((item) => { 
            return getListItem(item.type)
        })}
      </div>
  )
}

//这是配置文件组件,我们可以在其中同时呈现 4 个列表。

import ListContainer from './listContainer'

    const Profile = () => {
      return (
         <ListContainer type="review" />
         <ListContainer type="spost" />
         <ListContainer type="cpost" />
         <ListContainer type="apost" />
      )
    }