• React+AntdUi实现《好客租房系统》房屋详情05.1


    我的收藏模块

    检查房源是否收藏
    收藏房源
    检查房源是否收藏 
    在state中添加状态,isFavorite(表示是否收藏),默认值是false
    state= {
    // 表示房源是否收藏
    isFavorite: false
    }

    创建方法 checkFavorite,在进入房源详情页面时调用该方法
    先调用isAuth方法,来判断是否登陆
    如果未登录,直接return,不再检查是否收藏
    如果已登陆,从路由参数中,获取当前房屋id
    使用API调用接口,查询该房源是否收藏
    如果返回状态码为200,就更新isFavorite;否则,不做任何处理

    async checkFavorite() {
    const isLogin = isAuth()
    
    if (!isLogin) {
    // 没有登录
    return
    }
    
    // 已登录
    const { id } = this.props.match.params
    const res = await API.get(`/user/favorites/${id}`)
    
    const { status, body } = res.data
    if (status === 200) {
    // 表示请求已经成功,需要更新 isFavorite 的值
    this.setState({
    isFavorite: body.isFavorite
    })
    }
    }
    {/*在页面结构中,通过状态isFavorite修改收藏按钮的文字和图片内容
     底部收藏按钮 */}
    <Flex className={styles.fixedBottom}>
    <Flex.Item>
    <img
    src={
    BASE_URL + (isFavorite ? '/img/star.png' : '/img/unstar.png')
    }
    className={styles.favoriteImg}
    alt="收藏"
    />
    <span className={styles.favorite}>
    {isFavorite ? '已收藏' : '收藏'}
    </span>
    </Flex.Item>
    <Flex.Item>在线咨询</Flex.Item>
    <Flex.Item>
    <a href="tel:400-618-4000" className={styles.telephone}>
    电话预约
    </a>
    </Flex.Item>
    </Flex>

    收藏房源
    给收藏按钮绑定点击事件,创建方法handleFavorite作为事件处理程序
    调用isAuth方法,判断是否登陆
    如果未登录,则使用Modal.alert 提示用户是否去登陆
    如果点击取消,则不做任何操作
    如果点击去登陆,就跳转到登陆页面,同时传递state(登陆后,再回到房源收藏页面)

    const isLogin = isAuth()
    const { history, location, match } = this.props
    
    if (!isLogin) {
    // 未登录
    return alert('提示', '登录后才能收藏房源,是否去登录?', [
    { text: '取消' },
    {
    text: '去登录',
    onPress: () => history.push('/login', { from: location })
    }
    ])
    }

    根据isFavorite判断,当前房源是否收藏
    如果未收藏,就调用添加收藏接口,添加收藏
    如果收藏了,就调用删除接口,删除收藏

    if (isFavorite) {
    // 已收藏,应该删除收藏
    const res = await API.delete(`/user/favorites/${id}`)
    // console.log(res)
    this.setState({
    isFavorite: false
    })
    
    if (res.data.status === 200) {
    // 提示用户取消收藏
    Toast.info('已取消收藏', 1, null, false)
    } else {
    // token 超时
    Toast.info('登录超时,请重新登录', 2, null, false)
    }
    } else {
    // 未收藏,应该添加收藏
    const res = await API.post(`/user/favorites/${id}`)
    // console.log(res)
    if (res.data.status === 200) {
    // 提示用户收藏成功
    Toast.info('已收藏', 1, null, false)
    this.setState({
    isFavorite: true
    })
    } else {
    // token 超时
    Toast.info('登录超时,请重新登录', 2, null, false)
    }
    }
    handleFavorite = async () => {
    const isLogin = isAuth()
    const { history, location, match } = this.props
    
    if (!isLogin) {
    // 未登录
    return alert('提示', '登录后才能收藏房源,是否去登录?', [
    { text: '取消' },
    {
    text: '去登录',
    onPress: () => history.push('/login', { from: location })
    }
    ])
    }
    
    // 已登录
    const { isFavorite } = this.state
    const { id } = match.params
    
    if (isFavorite) {
    // 已收藏,应该删除收藏
    const res = await API.delete(`/user/favorites/${id}`)
    // console.log(res)
    this.setState({
    isFavorite: false
    })
    
    if (res.data.status === 200) {
    // 提示用户取消收藏
    Toast.info('已取消收藏', 1, null, false)
    } else {
    // token 超时
    Toast.info('登录超时,请重新登录', 2, null, false)
    }
    } else {
    // 未收藏,应该添加收藏
    const res = await API.post(`/user/favorites/${id}`)
    // console.log(res)
    if (res.data.status === 200) {
    // 提示用户收藏成功
    Toast.info('已收藏', 1, null, false)
    this.setState({
    isFavorite: true
    })
    } else {
    // token 超时
    Toast.info('登录超时,请重新登录', 2, null, false)
    }
    }
    }
    

    本文参考react好租客项目Day10-检测是否登&退出&axios拦截器&鉴权路由&收藏模块_码化疼-CSDN博客

  • 相关阅读:
    缅怀我的第一台平板——Surface RT
    【万里征程——Windows App开发】DatePicker&Timepicker
    【万里征程——Windows App开发】用浮出控件做预览效果
    【万里征程——Windows App开发】应用栏
    【万里征程——Windows App开发】画笔和图像
    【万里征程——Windows App开发】绘制图形
    稻香
    【万里征程——Windows App开发】动画1
    【SICP练习】152 练习4.8
    【SICP练习】151 练习4.7
  • 原文地址:https://www.cnblogs.com/wmlcn/p/15083100.html
Copyright © 2020-2023  润新知