You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React中如何根据传入的字数Props实现showMore段落展开收起组件?

实现按字数截断的ShowMore组件

核心思路

要实现按单词数(而非字符数)截断文本,关键是先将文本拆分为独立单词的数组,再截取指定数量的单词重新拼接,同时配合状态管理实现展开/收起的切换逻辑。

具体实现(React示例)

import { useState } from 'react';

const ShowMore = ({ wordCount, children }) => {
  const [isExpanded, setIsExpanded] = useState(false);

  // 按单词数截断文本的工具函数
  const truncateText = (text, limit) => {
    // 按空白字符拆分单词,自动过滤连续空格
    const words = text.trim().split(/\s+/);
    // 总单词数不超过限制时直接返回原文本
    if (words.length <= limit) return text;
    // 截取指定数量单词并拼接,添加省略号
    return words.slice(0, limit).join(' ') + '...';
  };

  const displayText = isExpanded ? children : truncateText(children, wordCount);
  // 判断是否需要显示展开/收起按钮
  const hasMore = children.trim().split(/\s+/).length > wordCount;

  return (
    <div className="show-more">
      <p>{displayText}</p>
      {hasMore && (
        <button onClick={() => setIsExpanded(!isExpanded)}>
          {isExpanded ? '收起' : '展开'}
        </button>
      )}
    </div>
  );
};

// 使用示例
// <ShowMore wordCount={5}>这是一段包含多个单词的测试文本,用来验证按字数截断的功能是否正常</ShowMore>

适配中文场景的调整

如果需要按汉字数截断(而非英文单词),可以修改拆分逻辑:

const truncateText = (text, limit) => {
  // 将文本拆分为单个字符,过滤空字符
  const chars = [...text].filter(char => char.trim() !== '');
  if (chars.length <= limit) return text;
  return chars.slice(0, limit).join('') + '...';
};

内容的提问来源于stack exchange,提问作者M9heb

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.14 07:14:57