React 基础知识~样式组件/ inline_style

React 基础知识~样式组件/ inline_style
最新回答
听风入韵

2023-05-24 06:27:29

在 React 中,样式组件和内联样式是两种常见的样式处理方式。以下是对这两陪铅种方式的详细解释和示例:

内联样式

内联样式是直接在 React 组件的 JSX 中使用 JavaScript 对象来定义样式。这种方式的特点包括:

  1. JavaScript 编写:内联样式必须使用 JavaScript 对象来定义。
  2. style 属性:样式对象必须高颤赋值给 style 属性。
  3. 驼峰命名:CSS 属性名需要转换为驼峰命名法,例如 fontWeight 而不是 font-weight。
  4. 动态样式:可以方便地根据组件的状态动态改变样式。
示例代码import { useState } from "react";const Example = () => { const [isSelected, setIsSelected] = useState(false); const clickHandler = () => setIsSelected((prev) => !prev); const style = { width: 120, height: 60, display: "block", fontWeight: "bold", "border-radius": 9999, // 使用双引号包裹 kebab-case 属性名 cursor: "pointer", border: "none", margin: "auto", background: isSelected ? "pink" : "", }; return ( <> <button style={style} onClick={clickHandler}> Button </button> <div style={{ textAlign: "center" }}>{isSelected && "Clicked!"}</div> </> );};export default Example;关键点说明
  • 动态样式:background 属性根据 isSelected 状态动态变化。
  • kebab-case 处理:border-radius 被转换为 "border-radius" 并用双引号包裹。
  • 简洁内联样式:<div> 的样式直接内联在 JSX 中。
样式组件

样式组件通常指的是使用 CSS-in-JS 库(如 styled-components 或 Emotion)来创建具有样式的 React 组件。这芦念好种方式允许你在 JavaScript 中编写 CSS,并且样式是组件作用域的。

示例代码(使用 styled-components)import styled from "styled-components";import { useState } from "react";const StyledButton = styled.button` width: 120px; height: 60px; display: block; font-weight: bold; border-radius: 9999px; cursor: pointer; border: none; margin: auto; background: ${(props) => (props.isSelected ? "pink" : "")};`;const Example = () => { const [isSelected, setIsSelected] = useState(false); const clickHandler = () => setIsSelected((prev) => !prev); return ( <> <StyledButton isSelected={isSelected} onClick={clickHandler}> Button </StyledButton> <div style={{ textAlign: "center" }}>{isSelected && "Clicked!"}</div> </> );};export default Example;关键点说明
  • 组件作用域样式:StyledButton 是一个样式组件,其样式只作用于该组件。
  • 动态样式:通过 props 动态改变样式,例如 background 根据 isSelected 变化。
  • CSS 语法:可以直接使用 CSS 语法,包括 kebab-case 属性名。
总结
  • 内联样式:适合简单的、动态的样式需求,直接在 JSX 中使用 JavaScript 对象定义。
  • 样式组件:适合复杂的样式需求,使用 CSS-in-JS 库创建组件作用域的样式,支持动态 props 和完整的 CSS 语法。

选择哪种方式取决于项目的需求和个人的偏好。内联样式简单直接,而样式组件提供了更强大的样式管理和复用能力。