JSX 样式处理

本文介绍了如何在JavaScriptJSX中使用行内style和类名className实现CSS样式。首先,通过行内style展示基本用法,然后优化为对象形式。接着,讲解如何通过import引入并应用外部CSS类名样式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

学习目标: 能够在 JSX 中实现 CSS 样式处理
 1. 行内样式
实现: 在元素身上绑定一个 style 样式
  - 行内样式 · style

function APP(){
    return (
        <div className="App">
            <div style={{color:'red',fontSize:'10px'}}>this is div</div>
        </div>
    )
}
export default App

  - 行内样式·style·优化写法

function App() {
  const divStyle1 = {
    color:'blue',
    fontSize:'20px'
  }
  return (
        <div className="App">
            <div style={divStyle1}>this is div</div>
        </div>
    )
}

export default App;

 2. 类名样式
实现: 在元素身上绑定一个 className 属性即可
  1. 创建一个 css 样式表文件 app.css

.colors {
  color: peru;
  font-size: 40px;
}

  2. JSX 中引入 css 文件

// 使用import引入样式表文件
import './app.css'

  3. 在元素上用 className 属性绑定 class 样式

    <div className='colors'>类名样式</div>

运行结果:
在这里插入图片描述

### JSX处理换行与特殊字符 在 ReactJSX 编程环境中,字符串默认会被转义以防止 XSS 攻击[^1]。这意味着任何嵌入到 JSX 中的 HTML 实体(如 `&`, `<`, 或 `>`)都会被解析为其对应的文本表示而非实际的 HTML 元素或符号。 #### 处理换行 对于换行符 `\n`,React 并不直接将其渲染为 DOM 中的实际换行。这是因为浏览器本身并不会将纯文本中的换行符解释为断行。为了实现真正的换行效果,可以采用以下方式: - **使用 CSS 属性** 可以为容器设置 `white-space: pre-wrap;` 样式属性,这样可以让文本中的换行符正常显示。 ```css .preformatted { white-space: pre-wrap; } ``` 随后,在 JSX 中可以直接写入带换行符的内容: ```javascript <div className="preformatted"> First line\nSecond line </div> ``` - **手动替换换行为 `<br />`** 如果希望更精确控制换行位置,则可以通过 JavaScript 替换逻辑将换行符转换成 `<br />` 标签: ```javascript const textWithBreaks = "First line\nSecond line".split('\n').map((line, index) => ( <React.Fragment key={index}> {line} {index !== lines.length - 1 && <br />} </React.Fragment> )); ``` #### 特殊字符的处理 当需要展示某些特殊的 Unicode 字符或者 HTML 实体时,可采取如下策略: - **直接书写 UTF-8 字符** 对于简单的版权符号 ©,可以在 JSX 中直接写出该字符: ```javascript <p>©</p> ``` - **通过 Unicode 表达** 利用 Unicode 转义序列表达复杂字符。例如,`\u00A9` 是版权符号的 Unicode 值: ```javascript <p>{'\u00A9'}</p> ``` - **利用数组组合结构化内容** 当需要混合普通文本与其他标记语言片段时,可以用数组的方式构建复杂的 JSX 结构: ```javascript <div>{['Text before ', <span>&</span>, ' Text after']}</div> ``` - **危险模式下的原生 HTML 插入** 若确实需要插入未经转义的原始 HTML 内容,可以借助 `dangerouslySetInnerHTML` 方法完成此操作。需要注意的是这种方法存在潜在的安全风险,应谨慎使用: ```javascript <div dangerouslySetInnerHTML={{ __html: 'Copyright ©' }} /> ``` #### 自定义模板函数防注入攻击 为了避免用户输入可能引发的安全隐患,还可以自定义类似于标签模板的功能来过滤掉有害代码[^2]。下面是一个简单示例: ```javascript function safeHtml(strings, ...values) { let result = strings[0]; values.forEach((value, i) => { result += String(value).replace(/[&<>"']/g, c => ({ '&': '&', '<': '<', '>': '>', '"': '"', "'": ''' })[c] ); result += strings[i + 1]; }); return result; } const userMessage = "<script>alert('XSS')</script>"; <div dangerouslySetInnerHTML={{ __html: safeHtml`${userMessage}` }} />; ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨落云尚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值