Skip to content

Commit c4485cb

Browse files
committedJan 4, 2024
✨ Detail - 路由跳转 & 数据渲染
1 parent 76f37ca commit c4485cb

File tree

4 files changed

+115
-2
lines changed

4 files changed

+115
-2
lines changed
 
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
import {http} from '@/utils'
2+
import type {ResType} from '@/apis/shared.ts'
3+
4+
/**
5+
* 响应数据
6+
*/
7+
export type DetailDataType = {
8+
/**
9+
* 文章id
10+
*/
11+
art_id: string;
12+
/**
13+
* 文章-是否被点赞,-1无态度, 0未点赞, 1点赞, 是当前登录用户对此文章的态度
14+
*/
15+
attitude: number;
16+
/**
17+
* 文章作者id
18+
*/
19+
aut_id: string;
20+
/**
21+
* 文章作者名
22+
*/
23+
aut_name: string;
24+
/**
25+
* 文章作者头像,无头像, 默认为null
26+
*/
27+
aut_photo: string;
28+
/**
29+
* 文章_评论总数
30+
*/
31+
comm_count: number;
32+
/**
33+
* 文章内容
34+
*/
35+
content: string;
36+
/**
37+
* 文章-是否被收藏,true(已收藏)false(未收藏)是登录的用户对此文章的收藏状态
38+
*/
39+
is_collected: boolean;
40+
/**
41+
* 文章作者-是否被关注,true(关注)false(未关注), 说的是当前登录用户对这个文章作者的关注状态
42+
*/
43+
is_followed: boolean;
44+
/**
45+
* 文章_点赞总数
46+
*/
47+
like_count: number;
48+
/**
49+
* 文章发布时间
50+
*/
51+
pubdate: string;
52+
/**
53+
* 文章_阅读总数
54+
*/
55+
read_count: number;
56+
/**
57+
* 文章标题
58+
*/
59+
title: string;
60+
}
61+
62+
export function fetchArticleDetailAPI(id: string) {
63+
return http.request<ResType<DetailDataType>>({
64+
url: `/articles/${id}`,
65+
})
66+
}
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,44 @@
1+
import {useEffect, useState} from 'react'
2+
import {DetailDataType, fetchArticleDetailAPI} from '@/apis/detail.ts'
3+
import {useNavigate, useSearchParams} from 'react-router-dom'
4+
import {NavBar} from 'antd-mobile'
5+
16
const Detail = () => {
2-
return <div>this is Detail</div>
7+
const [detail, setDetail] = useState<DetailDataType | null>(null)
8+
9+
const [params] = useSearchParams()
10+
const id = params.get('id')
11+
useEffect(() => {
12+
const getDetail = async () => {
13+
try {
14+
const res = await fetchArticleDetailAPI(id!)
15+
setDetail(res.data.data)
16+
} catch (error) {
17+
throw new Error('fetchArticleDetailAPI error')
18+
}
19+
}
20+
getDetail()
21+
22+
}, [])
23+
24+
const navigate = useNavigate()
25+
const back = () => {
26+
navigate(-1)
27+
}
28+
29+
// 数据返回前 loading
30+
if (!detail) {
31+
return <div>this is loading</div>
32+
}
33+
34+
return (
35+
<div>
36+
<NavBar onBack={back}>{detail?.title}</NavBar>
37+
<div dangerouslySetInnerHTML={{
38+
__html: detail?.content,
39+
}}></div>
40+
</div>
41+
)
342
}
443

544
export default Detail

‎day-12/react-jike-mobile/src/pages/Home/HomeList/index.tsx

+8
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import {Image, InfiniteScroll, List} from 'antd-mobile'
22
import {useEffect, useState} from 'react'
33
import {ArticleListRes, fetchArticleListAPI} from '@/apis/list.ts'
4+
import {useNavigate} from 'react-router-dom'
45

56
type Props = {
67
channelId: string
@@ -56,11 +57,18 @@ const HomeList = (props: Props) => {
5657
}
5758
}
5859

60+
// 路由跳转
61+
const navigate = useNavigate()
62+
const goToDetail = (id: string) => {
63+
navigate(`/detail?id=${id}`)
64+
}
65+
5966
return (
6067
<>
6168
<List>
6269
{articleRes.results.map((item) => (
6370
<List.Item
71+
onClick={() => goToDetail(item.art_id)}
6472
key={item.art_id}
6573
prefix={
6674
<Image

‎day-12/react-jike-mobile/src/pages/Home/index.tsx

+1-1
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ const Home = () => {
1010
return (
1111
<div className="tabContainer">
1212
{/* tab 区域 */}
13-
<Tabs>
13+
<Tabs defaultActiveKey={'0'}>
1414
{channels.map(item => (
1515
<Tabs.Tab title={item.name} key={item.id}>
1616
<div className="listContainer">

0 commit comments

Comments
 (0)
Please sign in to comment.