老师,能帮忙看一下我写的HomePage组件是否规范么,因为我是按函数式写的,课程中是类组件。

来源:9-7 【中间件】使用redux-thunk中间价实现异步action

慕UI2205826

2021-01-31

import React, {useState, useEffect} from 'react';
import styles from './HomePage.module.css'
import { Header, Footer, Carousel, SideMenu, ProductCollection, BusinessPartners } from '../../components';
import { Row, Col, Typography, Spin } from 'antd';
// import { productList1, productList2, productList3 } from './mockups';
import sideImage1 from '../../assets/images/sider_2019_12-09.png';
import sideImage2 from '../../assets/images/sider_2019_02-04.png';
import sideImage3 from '../../assets/images/sider_2019_02-04-2.png';
import { useTranslation } from 'react-i18next';
import { useDispatch, useSelector } from 'react-redux';
import { initRecommendProductDataActionCreator } from '../../redux/recommendProducts/recommendProductsActions';
import { RootState } from '../../redux/store'

interface State {
    productList: any[],
    loading: boolean
}


export const HomePage: React.FC = () => {
    const { t } = useTranslation()
    const dispatch = useDispatch()
    const productList = useSelector((state: RootState) => state.recommendProduct.productList)
    const loading = useSelector((state: RootState) => state.recommendProduct.loading)

    useEffect(() => {
        dispatch(initRecommendProductDataActionCreator());
    },  [])

    return (
        <>
        <Header/>
        {/* 页面内容 content */}
        <div className={styles['page-content']}>
            <Row style={{marginTop: 20}}>
            <Col span={6}>
                <SideMenu/>
            </Col>
            <Col span={18}>
                <Carousel/>
            </Col>
            </Row>
            <>
            {
             loading ? 
             <Spin></Spin> : <>
                <ProductCollection 
                title={<Typography.Title level={3} type="warning">{t('home_page.hot_recommended')}</Typography.Title>}
                sideImage={sideImage1}
                products={productList[0].touristRoutes}
                />
                <ProductCollection 
                title={<Typography.Title level={3} type="danger">{t('home_page.new_arrival')}</Typography.Title>}
                sideImage={sideImage2}
                products={productList[1].touristRoutes}
                />
                <ProductCollection 
                title={<Typography.Title level={3} type="success">{t('home_page.domestic_travel')}</Typography.Title>}
                sideImage={sideImage3}
                products={productList[2].touristRoutes}
                /></>
            }
            </>
            <BusinessPartners/>
        </div>
        <Footer/>
        </>
    )
}
写回答

1回答

阿莱克斯刘

2021-02-04

hello 同学们你好,你的代码已经相当规范了,只不过有个建议就是最好不直接从'../../redux/store'中引用RootState

import { RootState } from '../../redux/store'

有个更加方便的方法在接下来的课程中会介绍,就是使用一个自定义的 useSelector hook。

谢谢

0
1
慕UI2205826
非常感谢!
2021-02-06
共1条回复

React18 系统精讲 结合TS打造旅游电商平台

React18 精讲 + 结合 TS 实战 + 热门业务开发,获取必备技能

2008 学习 · 1024 问题

查看课程