React+Ts项目(网易云音乐)四

一、热门推荐组件结构搭建

由于"热门推荐""新碟上架""榜单"的头部结构一致,所以可以封装成一个公用组件放在src/components下,便于复用。

然后再从组件中接收传过来的内容,渲染头部结构。 并且设置头部结构的样式styled.ts中。

在"热门推荐"组件中引入头部组件,并利用父传子,将内容传给头部组件中。

完成"热门推荐"组件中的样式

在recommend/store/index.ts中存储热门推荐组件中用到的数据 service/recommend.ts中封装接口方法

store/recommend.ts:

interface IRecommendData { hotRecommends: any[] }

const initialState: IRecommendState = { banners: [], hotRecommends: [] }

再到组件中useEffect中调用异步请求方法

然后再到"热门推荐"组件中利用useAppSelector获取数据,利用map方法渲染数据

将"热门推荐"组件中的这些封装成一个个item组件 便于其他组件使用,所以作为公用组件封装在src/components下

并完成组件样式设置。

在"热门推荐"组件中传入数据

播放量数据格式化以及图片格式化显示:

播放量数据由49987-->4万 图片按照要求尺寸显示

封装一个工具函数在utils文件夹下

然后再到item组件中调用工具函数,实现格式化显示。

{formatCount(itemData.playCount)} {getImageSize(itemData.picUrl, 140)}

二、"新碟上架"组件结构搭建以及功能展示

1、先搭建头部结构,引入先前封装好的公用头部结构,并且传入内容到头部组件中。

并在"新碟上架"组件中使用

搭建"新碟上架"组件的结构

并且实现样式配置

然后再在service/recommend.ts文件中封装接口方法用于请求新碟上架组件中用到的轮播图数据

再到store/recommend.ts文件中存储数据,书写异步请求方法

interface IRecommendState { newAlbums:any[] } const initialState :IRecommendState={ newAlbums:[] }

在recommend/index.tsx文件中的useEffect中调用异步请求方法,获取轮播图数据。 再到"新碟上架"组件中,利用useAppSelector拿到redux中存储的轮播图数据,再用map方法渲染在组件中显示。

这里的轮播图数据是这样显示的:

1、首先一共只有两页轮播图 2、其次,每一页轮播图中只会显示五张图片。

拿到轮播图数据,利用slice方法切分,第一页 slice(0,5),第二页 slice(5,11)

{[0,1].map((item)=>{ return ( //item的值是0和1,表示第一页和第二页 {newAlbums.slice(item5,(item+15)).map((iten)=>{ // iten的值是轮播图中的每一张图片,每一页显示五张图片 return ( .... )}))

轮播图数据渲染完毕后,再去实现图片左右切换功能。利用组件自带的prev()和next()方法

先拿到整个轮播图组件对象,跟top-banner中获取轮播图组件对象的方法一致

"新碟上架"中的这些碟片可以封装成一个个的item组件,再利用父传子将图片数据传入item组件中进行渲染。

src/components/new-album-item/index.tsx 先搭建item组件的结构,然后再书写样式文件,最后在接收数据进行渲染内容。

在这里,显示的图片也是需要格式化显示的,要让图片按照要求尺寸显示。调用getImageSize方法。

三、"榜单"组件结构搭建以及功能展示

1、先引入头部结构组件

2、再实现下方的榜单组件搭建。

service/recommend.ts文件中封装请求方法,接口方法要求传入一个number型的id值作为参数。服务器会根据传入的id值来分配各个对应榜单的数据。

在store/recommend.ts文件中存储数据,封装异步方法,获取每一个榜单的数据。 但是要求各个榜单的数据都是同一时间展示在组件中的,所以我们要用到promise数组。

目的:利用promise数组来存储各个获取到的榜单数据,然后再利用promise.all()方法,只有当每一个榜单的数据都成功获取后,才会执行该方法下的then方法。

声明一个promise型的数组:

const promises :Promise[]=[] //这里的T就是数组中元素的数据类型

再利用promise.all方法:Promise.all(promises).then()

保证只有当每一个榜单的数据都成功获取后,才会执行then方法。

准备一个id数组,存放着每一个榜单对应的id值。

分别传入不同的id值,调用接口方法,获取到不同的榜单数据,push添加至promises数组中。

最后执行promise.all方法。

这样就可以实现三个榜单的数据都是统一显示的。

再将数据渲染在"榜单"组件中。

由于这三个榜单的结构一致,所以可以封装成一个item组件。 recommend/c-cpns/top-ranking-item/index.tsx:

在完成样式的搭建

五、"推荐组件"下的用户登录组件结构搭建

六、"入驻歌手"组件结构搭建及功能展示

发现这两个组件中的头部结构也是一致的,所以可以封装到src/components下,便于多组件复用。

在"入驻歌手"组件中引入头部组件,并将内容传入

service/recommend.ts下封装接口方法

store/recommend.ts下书写异步请求

在组件中获取数据进行渲染

七、"热门主播"组件结构搭建及功能演示 与"入驻歌手"同理

相关推荐
muyouking111 小时前
React 状态管理入门:从 useState 到复杂状态逻辑
react.js
CF14年老兵6 小时前
99% 的前端开发者忽略了这个 React 性能利器
前端·react.js·trae
啃火龙果的兔子16 小时前
React 多语言(i18n)方案全面指南
前端·react.js·前端框架
国家不保护废物19 小时前
TailwindCSS:原子化CSS的革命,让React开发爽到飞起!🚀
前端·css·react.js
朦胧之21 小时前
React 18 特性分析
react.js
BUG收容所所长1 天前
如何用React快速搭建一个AI语音合成应用?从零到一的完整实战指南
前端·javascript·react.js
顾辰逸you1 天前
网易云音乐项目(React+Ts)
react.js
小高0071 天前
React 生命周期全景图:从类组件到 Hooks,一次看懂 2025 实战用法
前端·javascript·react.js
胡gh1 天前
受控组件与非受控组件:前端开发中的两种状态管理模式
前端·react.js·面试