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

React应用中使用Material UI实现文本中间截断的问题

React + Material UI 实现文本中间通用截断

方法一:通用自定义截断函数

写一个可复用的工具函数,灵活控制前后保留字符数,同时处理短文本的边界情况:

const truncateMiddle = (text, startLength = 5, endLength = 5) => {
  if (!text || text.length <= startLength + endLength) return text;
  return `${text.substring(0, startLength)}...${text.substring(text.length - endLength)}`;
};

结合Material UI使用示例

直接在组件中调用函数,配合Typography组件展示:

import Typography from '@mui/material/Typography';

const TokenDisplay = ({ token }) => {
  return (
    <Typography variant="body1">
      {truncateMiddle(token, 5, 5)}
    </Typography>
  );
};

// 调用组件
<TokenDisplay token="0x3b3ch76c99f02o8k29aef20" />

该函数会自动判断文本长度:如果原文本长度小于等于前后保留字符数之和,直接返回原文本,避免多余省略号。

方法二:封装为可复用MUI组件

若项目多处需要该效果,可封装成独立组件提升复用性:

import Typography from '@mui/material/Typography';
import PropTypes from 'prop-types';

const TruncatedText = ({ text, startLength = 5, endLength = 5, ...props }) => {
  const truncated = truncateMiddle(text, startLength, endLength);
  
  return (
    <Typography {...props}>
      {truncated}
    </Typography>
  );
};

TruncatedText.propTypes = {
  text: PropTypes.string.isRequired,
  startLength: PropTypes.number,
  endLength: PropTypes.number,
};

// 使用示例
<TruncatedText text="0x3b3ch76c99f02o8k29aef20" variant="body1" />

关于CSS方法无效的说明

你尝试的wordWrap: 'break-word'用于处理长文本换行,和中间截断逻辑无关。CSS原生的text-overflow仅支持开头或结尾截断,无法实现中间截断效果,因此必须通过JS逻辑处理。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.15 22:26:26