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

React中如何仅当<Trans>翻译字符串非空时渲染对应<div>组件

问题根因
  • 你当前的判断逻辑从根上就不对:b.description存的是<Trans>组件执行后返回的React元素对象,属于引用类型,不管最终翻译出来的内容是正常文本、空字符串还是全空格,这个对象本身永远是真值,所以b.description &&这个条件永远成立,外层<div>自然每次都会渲染。
  • 就算你拿到了翻译后的原始字符串,全空格的空白字符串直接做布尔判断也是真值,不会被自动过滤。
  • 顺便提一句:你贴的示例代码有基础语法错误,<Trans>标签没闭合、JSON配置里两个书籍节点之间缺逗号,实际跑的时候要先修正这些问题。
推荐实现方案

最稳妥的方式是不要提前把<Trans>组件写死在静态数组里,先通过i18next提供的t()方法拿到翻译后的纯文本,做去空格校验后,再决定要不要渲染描述区块:

import { useTranslation, Trans } from 'react-i18next';

export default function BookList() {
  const { t } = useTranslation();
  // 只存书籍id和对应的翻译key,不要提前塞JSX
  const books = [
    { id: 1, nameKey: 'books.firstbook.name', descKey: 'books.firstbook.description' },
    { id: 2, nameKey: 'books.secondbook.name', descKey: 'books.secondbook.description' }
  ];

  return (
    <div className="book-list">
      {books.map(book => {
        // 取翻译文本,去除首尾空格后判断是否有有效内容
        const validDesc = t(book.descKey).trim();
        return (
          <div key={book.id} className="book-item">
            <div className="book-name">
              <Trans i18nKey={book.nameKey} />
            </div>
            {/* 仅当描述有实际内容时才渲染描述div */}
            {validDesc && (
              <div className="book-description">
                <Trans i18nKey={book.descKey} />
              </div>
            )}
          </div>
        )
      })}
    </div>
  )
}
其他可选方案

如果你因为业务限制必须保留原来把<Trans>存在数组里的写法,那遍历的时候单独取对应翻译key的文本做判断即可,逻辑和上面一致:

const { t } = useTranslation();
// 假设你保留了原有的存了Trans组件的books数组,记得给每个book补上对应的descKey字段
books.map(book => {
  const validDesc = t(book.descKey).trim();
  return validDesc ? <div className="book-description">{book.description}</div> : null
})

如果想减少重复判断,也可以在i18next初始化时加配置,让空字符串翻译直接返回undefined,不过全空格的场景还是建议业务层手动trim()判断,灵活性更高:

import i18n from 'i18next';

i18n.init({
  // 其余初始化配置保持不变
  returnEmptyString: false, // 翻译值为空字符串时直接返回undefined
})

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 11:33:14