1、行内样式

想给虚拟dom添加行内样式,需要使用表达式传入样式对象的方式来实现

行内样式需要写入一个样式对象,而这个样式对象的位置可以放在很多地方

例如:render函数里、组件原型上、外链js文件中

注意:这里的两个括号,第一个表示我们在要JSX里插入JS了,第二个是对象的括号

 <p style={{color:'red', fontSize:'14px'}}>Hello world</p>

2、使用class

React推荐我们使用行内样式,因为React觉得每一个组件都是一个独立的整体

其实我们大多数情况下还是大量的在为元素添加类名,但是需要注意的是,class需要写成className(因为毕竟是在写类js代码,会收到js规则的现在,而class是关键字)

import React, { Component } from 'react'
1. 外部引入定义的样式
import styles from './style.css' class ClassStyle extends Component {
render() {
// js逻辑
let className = cx({
font: false
})
return (
<>
<div className={className}>hello</div>
<p className='setstyle'>样式</p>
<DivContainer>
world
</DivContainer>
<>
)
}
} export default ClassStyle

3、classNames不同的条件添加不同的样式

有时候需要根据不同的条件添加不同的样式,比如:完成状态,完成是绿色,未完成是红色。那么这种情况下,我们推荐使用classnames这个包:

目的:

由于react原生动态添加多个className会报错

import style from './style.css'
<div className={style.class1 style.class2}</div>

想要得到最终渲染的效果是:

<div class='class1 class2'></div>
  1. 下载安装
    npm i -S classnames
  2. 使用
    import classnames from 'classnames'
    <div className=classnames({
    'class1': true,
    'class2': true
    )>
    </div>

4、css-in-js

styled-components是针对React写的一套css-in-js框架,简单来讲就是在js中写css。npm链接

  • 传统的前端方案推崇"关注点分离"原则,HTML、CSS、JavaScript 应该各司其职,进行分离。
  • 而在react项目中,更提倡组件化方案,自然形成了将HTML、CSS、JavaScript集中编写管理的方式。

styled-components 应该是CSS-in-JS最热门的一个库,通过styled-components,你可以使用ES6的标签模板字符串语法,为需要styled的Component定义一系列CSS属性,当该组件的JS代码被解析执行的时候,styled-components会动态生成一个CSS选择器,并把对应的CSS样式通过style标签的形式插入到head标签里面。动态生成的CSS选择器会有一小段哈希值来保证全局唯一性来避免样式发生冲突。

  1. 安装
npm i -S styled-components
  1. 定义样式

    样式js文件
    import styled from 'styled-components'
    const Title = styled.div`
    color:red;
    font-size:16px;
    h3{
    color:blue;
    font-size:20px;
    }
    `
    export {
    Title
    }

    显示

    就像使用常规 React 组件一样使用 Title

    import React, { Component } from 'react'
    import { Title } from './Styles'
    class App extends Component {
    render() {
    return (
    <div>
    <Title>
    我只是一个标题
    <h3>你好世界</h3>
    </Title>
    </div >
    );
    }
    }
    export default App
  2. 样式继承

    样式
    import styled from 'styled-components'
    const Button = styled.button`
    font-size: 20px;
    border: 1px solid red;
    border-radius: 3px;
    `; // 一个继承 Button 的新组件, 重载了一部分样式
    const Button2 = styled(Button)`
    color: blue;
    border-color: yellow;
    `; export {
    Button,
    Button2
    }

    显示

    import React, { Component } from 'react'
    import {
    Button,
    Button2
    } from './Styles'
    class App extends Component {
    render() {
    return (
    <div>
    <Button>我是一个按钮1</Button>
    <Button2>我是一个按钮2</Button2>
    </div >
    );
    }
    }
    export default App
  3. 属性传递

    样式
    import styled from 'styled-components'
    const Input = styled.input`
    color: ${props => props.inputColor || "blue"};
    border-radius: 3px;
    `;
    export {
    Input
    }

    显示

    import React, { Component } from 'react'
    import { Input } from './Styles'
    class App extends Component {
    render() {
    return (
    <div>
    <Input defaultValue="你好" inputColor="red"></Input>
    </div >
    );
    }
    }
    export default App

react之四种组件中DOM样式设置方式的更多相关文章

  1. vue组件中的样式属性:scoped,解决在父组件中无法修改子组件样式问题

    Scoped CSS规范是Web组件产生不污染其他组件,也不被其他组件污染的CSS规范. vue组件中的style标签标有scoped属性时表明style里的css样式只适用于当前组件元素,它是通过使 ...

  2. vue组件中的样式属性--scoped

    Scoped CSS Scoped CSS规范是Web组件产生不污染其他组件,也不被其他组件污染的CSS规范. vue组件中的style标签标有scoped属性时表明style里的css样式只适用于当 ...

  3. React技巧之组件中返回多个元素

    原文链接:https://bobbyhadz.com/blog/react-return-multiple-elements 作者:Borislav Hadzhiev 正文从这开始~ fragment ...

  4. 第七十三篇:解决Vue组件中的样式冲突

    好家伙, 1.组件之间的样式冲突 默认情况下,写在.vue组件中的样式会全局生效,因此很容易造成多个组件之间的样式冲突问题. 举个例子: 我们在Left.vue的组件中添加样式 <templat ...

  5. vue 组件中添加样式不生效

    如何产生 在开发项目中遇到在组件中添加样式不生效的情况.具体场景如下 //// vue 组件 <template> <div class="box" data-v ...

  6. 讨论两种Redis中Token的存储方式

    摘要:本文讨论一个问题:存储token时,token与对应用户id谁来作为key? 问题起源问题起源于要给公司的后台管理系统添加权限管理,选用的是开源框架shiro,而原本系统上是采用token做了登 ...

  7. react 不能往组件中传入属性的值为 undefined

    在使用 andt design 的时候遇到个需求,需要清除 Select 组件选中后的值,让它变成什么都没选中,显示 placeholder 刚开始以为设置为 null 即可,结果发现设置为 null ...

  8. vue--三种组件中之间的传值

    参考网址:https://www.jianshu.com/p/46573a741c29 一.父子组件之间的传值----props/$emit 组件之间的传值,我们比较常用到的是props/$emit ...

  9. QT中QToolTip样式设置的两种方式

    方式一 使用样式表设置 ui.label->setStyleSheet("QToolTip{border:1px solid rgb(118, 118, 118); backgroun ...

随机推荐

  1. git撤销已经push到远程仓库上的代码

    具体方法,git命令:git reset --hard <commit_id>git push origin HEAD --force commit_id可以通过git命令:git log ...

  2. Spring源码解析之ConfigurationClassPostProcessor(三)

    在上一章笔者介绍了ConfigurationClassParser.doProcessConfigurationClass(...)方法,在这个方法里调用了processImports(...)方法处 ...

  3. docker搭建mysql集群

    目录 一.集群方案 二.安装PXC集群 三.Haproxy负载均衡 四.访问测试 五.节点宕机或重启 六.参考 一.集群方案 1.Replication 速度快,但仅能保证弱一致性,适用于保存价值不高 ...

  4. Linux服务器JDK的安装

    JDK安装 开发java程序必须要的环境 下载JDK rpm. 安装环境 #检测当前系统是否安装Java环境 java -version #如果有就需要卸载 #rpm -qa|grep jdk #检测 ...

  5. 爱思助手备份 iPhone 时没有设置密码,恢复备份时需要密码的问题

    i4.cn 备份时 iPhone 上登陆的 Apple ID 曾经设置过备份密码,这个密码就是恢复备份时需要输入的密码!

  6. 实例_ Java中的代理模式

    静态代理 我们定义一个接口,并且使用代理模式,想要做到的就是在调用这个接口的实现类时在此方法上添加功能. public interface HelloInterface { void sayHello ...

  7. 数据库CPU 100%处理记录

    问题描述 2020年7月13日一大早收到告警,测试环境数据库CPU告警. 登录aws查看监控如下图   问题分析 出现这种cpu 100%的问题,都是因为sql性能问题导致的, 主要表现于 cpu 消 ...

  8. MySQL——字符集

    -- 字符集:是一个系统支持的所有抽象字符的集合 MySQL数据库的字符集(包括两个部分): 1.字符集:character 2.校对规则:collation MySQL中常见的字符集: utf8 l ...

  9. Jenkins(7)- 解决Linux下忘记Jenkins密码

    如果想从头学起Jenkins的话,可以看看这一系列的文章哦 https://www.cnblogs.com/poloyy/category/1645399.html admin密码未更改情况下 进入\ ...

  10. appnium显式等待机制

    强制等待: sleep不推荐全局隐式等待 全局隐式等待: 在服务端等待 driver.manage().timeouts().implicitlyWait(10, TimeUnit.SECONDS); ...