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. 网页前端video播放m3u8(HLS)

    网页前端video播放m3u8(HLS) HLS (HTTP Live Streaming)是Apple公司研发的流媒体传输技术,包括一个m3u8的索引文件.多个ts分片文件和key加密串文件.这项技 ...

  2. 学习Java的9张思维导图

    转自:https://blog.csdn.net/aitaozi11/article/details/79652943 网上搜集了java的学习思维导图,分享给大家. 01.Java程序设计(基础) ...

  3. 整理之BroadcaseReceiver

    广播的分类 有序广播:按接收器优先级从高到低接受消息,一次只能有一个接收器处理消息.中途可以被截断. 无序广播:所有接收器同时接受消息并处理,无法拦截. 本地广播:只能在本应用内传播的无需广播.上面两 ...

  4. 哲学家就餐问题-Java语言实现死锁避免

    哲学家就餐问题-Java语言实现死锁避免 我死锁预防是至少破坏死锁产生的四个必要条件之一,带来的问题就是系统资源利用率低且不符合开发习惯,而死锁避免不是事先釆取某种限制措施破坏死锁的必要条件,只是注意 ...

  5. RHCA-openstack学习部署笔记-CL210

    笔记说明:目前考试是基于RHELOSP13(32G)来进行环境部署,引入了容器,而学习是基于RHELOSP6来安装部署的,基于Openstack. 讨论:openstack.虚拟化和云计算的关系以及区 ...

  6. 史上最全git命令集

    配置化命令 git config --global user.name "Your Name" git config --global user.email "email ...

  7. etcd学习(9)-etcd中的存储实现

    etcd中的存储实现 前言 V3和V2版本的对比 MVCC treeIndex 原理 MVCC 更新 key MVCC 查询 key MVCC 删除 key 压缩 周期性压缩 版本号压缩 boltdb ...

  8. Ordering the Soldiers 题解

    CodeChef:ORDERS 简化题意: \(n\) 个人排队,给定每个人需要向左移动几个,求最终排列. 即还原逆序对. 错误想法 既然知道每个人向左移动 \(a_i\) 个,那就相当于让他的排名 ...

  9. 专项测试-App性能分析

    专项测试 app性能 Activity是Android组件中最基本也是最为常见用的四大组件(Activity,Service服务,Content Provider内容提供者,BroadcastRece ...

  10. angularjs实现购物清单

    HTML: 1:要定义ng-app,在html上定义ng-app="App"; 2:在body上定义ng-controller="ToDoCtrl" 3: &l ...