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

React仿WordCounter应用:实现文本全加粗功能遇阻

问题原因与解决方案

你的问题出在text.bold()的使用方式和React的HTML渲染机制上:

  • text.bold()本质是返回一个包裹了<b>标签的字符串,比如原文本是"hello",调用后会得到<b>hello</b>。但React默认会转义所有HTML内容直接渲染成文本,所以你看到的会是带<b>标签的字符串,而不是加粗的文本。

两种可行的解决办法:

方法1:使用dangerouslySetInnerHTML(注意风险)

如果你的文本输入是完全可控的(不会有用户输入的恶意内容),可以用这个属性让React解析HTML标签:

首先修改你的渲染部分,把原来直接输出{text}的地方改成:

<div dangerouslySetInnerHTML={{ __html: text }} />

你的handleBold函数可以保留原来的写法,但要注意如果重复点击会多次嵌套<b>标签,最好加个判断避免重复包裹。

方法2:用状态控制样式(推荐,更安全)

这种方式不需要处理HTML标签,通过CSS样式来控制文本加粗,完全规避XSS风险:

import { useState } from 'react';

function YourComponent() {
  const [text, setText] = useState('这里是你的文本');
  const [isBold, setIsBold] = useState(false);

  const handleBold = () => {
    setIsBold(!isBold);
  };

  return (
    <div>
      <div style={{ fontWeight: isBold ? 'bold' : 'normal' }}>{text}</div>
      <button className="btn btn-primary mx-1" onClick={handleBold}>Bold</button>
    </div>
  );
}

这种方法通过维护一个isBold状态,点击按钮时切换状态,然后用内联样式控制文本的粗细,逻辑更清晰也更安全。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:35:15