react实现文字展开和收起功能

  • 无论是在PC端页面还是WAP端页面,很常见的页面效果,超长文字,隐藏,然后点击展开和收齐功能。
    在这里插入图片描述
  • 通过React Hook提供的useState定义好状态,来点击切换展开和收起
  • id,name,image,info,price从父组件传递的数据
  • info.substring(0,200)先对文本内容截取
  • 通过对按钮绑定点击事件,去触发useState里面的setReadMore去改变readMore的状态,即可实现这个功能
  • 通过三目运算符 readMore ? info : `${info.substring(0,200)}...如果为真现实全部,否则为截取的字段内容
import React,{useState} from 'react'

const Tour = ({id,name,image,info,price}) => {
    
    const [readMore,setReadMore] = useState(false)

    return (
        <article className="single-tour">
            <img src={image} alt={name}/>
            <footer>
                <div className="tour-info">
                    <h4>{name}</h4>
                    <h4 className="tour-price">{price}</h4>
                </div>

                <p> { readMore ? info : `${info.substring(0,200)}...` }

                    <button onClick={() => setReadMore(!readMore)}> { readMore ? '隐藏内容' : '了解更多' }</button>
                </p>
            </footer>
        </article>
    )
}

export default Tour

  • 对应的css样式

.single-tour {
    background: var(--clr-white);
    border-radius: var(--radius);
    margin: 2rem 0;
    box-shadow: var(--light-shadow);
    transition: var(--transition);
  }
  .single-tour:hover {
    box-shadow: var(--dark-shadow);
  }
  .single-tour img {
    width: 100%;
    height: 20rem;
    object-fit: cover;
    border-top-right-radius: var(--radius);
    border-top-left-radius: var(--radius);
  }
  .tour-info {
    display: flex;
    justify-content: space-between;
    align-items: center;
    margin-bottom: 1.5rem;
  }
  .tour-info h4 {
    margin-bottom: 0;
  }
  .single-tour button {
    background: transparent;
    border-color: transparent;
    text-transform: capitalize;
    color: var(--clr-primary-5);
    font-size: 1rem;
    cursor: pointer;
    padding-left: 0.25rem;
  }
  .tour-price {
    color: var(--clr-primary-5);
    background: var(--clr-primary-10);
    padding: 0.25rem 0.5rem;
    border-radius: var(--radius);
  }
  .single-tour footer {
    padding: 1.5rem 2rem;
  }
  .single-tour .delete-btn {
    display: block;
    width: 200px;
    margin: 1rem auto 0 auto;
    color: var(--clr-red-dark);
    letter-spacing: var(--spacing);
    background: transparent;
    border: 1px solid var(--clr-red-dark);
    padding: 0.25rem 0.5rem;
    border-radius: var(--radius);
  }
  
  • 以上就是对功能的实现方法
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值