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

生产环境下better-react-mathjax无法渲染问题求助

解决better-react-mathjax在Vercel生产环境部分公式不渲染的问题

针对开发环境正常、Vercel生产环境部分LaTeX公式无法渲染且无控制台报错的情况,可尝试以下方案:

1. 为MathJax组件添加唯一key触发重渲染

生产环境React的优化机制可能导致组件更新时MathJax未重新解析公式。通过给<MathJax>组件绑定依赖currentQuestionIndex的key,确保切换题目时强制重新渲染:

<MathJax key={currentQuestionIndex}>
  {`${questions[currentQuestionIndex].number}. ${questions[currentQuestionIndex].description}`}
</MathJax>

2. 确认MathJax配置在生产环境正确加载

确保项目入口文件中正确初始化MathJax,优先使用官方CDN加载核心库,避免本地资源路径问题:

import { MathJaxContext } from 'better-react-mathjax';

const mathJaxConfig = {
  loader: { load: ['input/tex', 'output/svg'] },
  tex: { inlineMath: [['$', '$'], ['\\(', '\\)']] },
  svg: { fontCache: 'global' }
};

function App() {
  return (
    <MathJaxContext config={mathJaxConfig}>
      {/* 应用根组件 */}
    </MathJaxContext>
  );
}

3. 异步数据加载后手动触发公式渲染

若题目数据是异步获取的,生产环境可能出现数据加载完成后MathJax未重新解析DOM的情况。可在数据就绪后调用typeset方法强制渲染:

import { useMathJax } from 'better-react-mathjax';

// 组件内部逻辑
const { typeset } = useMathJax();

useEffect(() => {
  if (!isLoading && questions[currentQuestionIndex]) {
    typeset();
  }
}, [currentQuestionIndex, isLoading, typeset]);

4. 避免隐藏元素的渲染逻辑

原代码通过hidden/shown类切换显示状态,可能导致MathJax在元素隐藏时解析,显示后无法更新。改用条件渲染直接控制组件是否挂载:

{!isLoading && questions[currentQuestionIndex] && (
  <Fragment>
    <Text size="xl" mb="md" mt="md" color={'white'}>
      <MathJax key={currentQuestionIndex}>
        {`${questions[currentQuestionIndex].number}. ${questions[currentQuestionIndex].description}`}
      </MathJax>
    </Text>
    {questions[currentQuestionIndex].figureUrl && (
      <Image
        alt=""
        radius="md"
        src={questions[currentQuestionIndex].figureUrl}
      />
    )}
  </Fragment>
)}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.08 01:55:20