前端踩坑(七)--------------------------react 动态操作className

2023-11-08

前端踩坑(七)--------------------------react 动态操作className

问题描述:如何动态修改一个元素的CSS样式呢?

  1. jquery:如果只是写一个简单的页面,用jquery是最方便的方法。只要用jquery中的选择器就可以便捷地选中任何一个页面元素,对其style进行修改十分简单。
  2. 原生JS:就算是用原生的JavaScript,也可以通过document.getElementById("")来选中该元素,从而修改样式。
  3. react:在react中,因为核心思想是将页面元素组件化,把组件看成是一个状态机,因此需要通过控制状态的变化来实现。

作者:我不是小叮当

链接:https://www.jianshu.com/p/8b9c697509cb

来源:简书

一 , react 动态操作className

https://blog.csdn.net/qq_28002139/article/details/77005840

最近刚开始学习react.js 要直接应用到公司的项目中,所以入得坑甚至是走的弯路数不胜数,不管是多么复杂的还是多么白痴的坑,现在一一记录下来。

如下图,是其中一个设置性别的页面效果图,按照jQuery的写法就是绑定点击事件并且XX.addClass(‘XX’).siblings().removeClass(‘XX’);其实在react中也很简单,但是因为对基础知识没有系统的学习,所以入坑了。下面展示最后自己总结的两个方法,日后再有更好的方法时再进行总结。


方案一:(改变style)

<body>
<div class="page mine_memberInfo_sexPage" id="mineMemberInfoSexPage"></div>
</body>

<script type="text/babel">

    var SexSelect = React.createClass({
        getInitialState: function () {
            return{
                sex:"male"
            }
        },
        manItemClick:function () {
            this.setState({
                sex:"male"
            })
        },
        femaleItemClick:function () {
            this.setState({
                sex:"female"
            })
        },
        render: function () {
            var sexActiveStyle = {
                backgroundImage: "url('img/images/mine_memberInfo_sex_gou.png')",
                backgroundSize: "13px 10px",
                backgroundRepeat: "no-repeat",
                backgroundPosition: "right center"
            };
            var man = {
                width: "100%",
                padding: "6% 0",
                borderBottom: "1px solid #efeff4"
            };
            var female ={
                width: "100%",
                padding: "6% 0",
            };
            var sex = this.state.sex;
            return(
                    <div className="container">
                        <div className="sexSelectWrap">
                            <div className="man" style ={sex == "male" ? sexActiveStyle: man } onClick={this.manItemClick}>
                                <div></div>                                
                            </div>
                            <div className="female" style ={sex == "female" ? sexActiveStyle: female} onClick={this.femaleItemClick}>                           
                            	<div></div>                                
                            </div>
                        </div>
                        <button>确定</button>
                    </div>
            )
        }
    });
    ReactDOM.render(
        <SexSelect/>,
        document.getElementById("mineMemberInfoSexPage")
    )
</script>

方案二:(直接操纵className)

<body>
<div class="page mine_memberInfo_sexPage" id="mineMemberInfoSexPage"></div>
</body>

<script type="text/babel">

    var SexSelect = React.createClass({
        getInitialState: function () {
            return{
                sex:"male"
            }
        },
        manItemClick:function () {
            this.setState({
                sex:"male"
            })
        },
        femaleItemClick:function () {
            this.setState({
                sex:"female"
            })
        },
        render: function () {
            var sex = this.state.sex;
            return(
                    <div className="container">
                        <div className="sexSelectWrap">
                            <div className={sex == "male" ? "man sexActive": "man"}  onClick={this.manItemClick}>
                                <div></div>                               
                            </div>                                                  
 			    <div  className={sex == "female" ? "female sexActive": "female"}  onClick={this.femaleItemClick}>
<div></div>
			    </div> 
			</div> 
			<button>确定</button> 
		   </div> 
	   ) 
       } 
   }); 
   ReactDOM.render( 
        <SexSelect/>, 
	document.getElementById("mineMemberInfoSexPage") 
   )
</script>
其实。这个过程没有什么难度,但是因为将
 <div  className={sex == "female" ? "female sexActive": "female"}  onClick={this.femaleItemClick}>
写成
 <div  className=“sex == "female" ? female sexActive: female“  onClick={this.femaleItemClick}>
而出现了很多错误,以至于以为不能直接操纵className

二 , 设置多个className

https://blog.csdn.net/qq_35605231/article/details/84974029

在一个元素上设置样式,有一个固定的样式,然后还有一个使用三元运算符根据条件添加的样式。

比如说有一个固定样式"title":

<div className="title">标题</div>,

然后还要一个点击高亮的样式:

<div className={index === this.state.active ? "active" : null}>标题</div>

不能这样写:

<div className="title" className={index === this.state.active ? "active" : null}>标题</div>
方法一:ES6 模板字符串 ``

className={`title ${index === this.state.active ? 'active' : ''}`}
方法二:join("")

className={["title", index === this.state.active?"active":null].join(' ')}

方法三:classnames(需要下载classnames)

const classNames = require('classnames');
 
const Button = React.createClass({
  // ...
  render () {
    const btnClass = classNames({
      btn: true,
      'btn-pressed': this.state.isPressed,
      'btn-over': !this.state.isPressed && this.state.isHovered
    });
    return <button className={btnClass}>{this.props.label}</button>;
  }
});
个人喜好 第二种,一方面代码量少,另一方面方便对 className数组的增加与删除。

三 这是您如何使用react定义和使用内联样式的方法

/**
 * Style definitions.
 */
const STYLE = {
    infoColor: {
        color: 'green'
    },
    warningColor: {
        color: 'orange'
    },
    errorColor: {
        color: 'red'
    }
};

/**
 * Component
 */
class Welcome extends React.Component {

    /**
     * Rendering into the DOM.
     */
    render() {
        return (
            <div>
                <h2 style={STYLE.infoColor}>Welcome!</h2>
        )
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

前端踩坑(七)--------------------------react 动态操作className 的相关文章

  • Unity UGUI 无限循环列表 ----------多功能版

    一共有四种 循环列表 如下图 1 常用循环列表 2 收展嵌套 循环列表 3 弹框 循环列表 4 翻页 循环列表 注意点 1 层次结构如下图 2 Content 和 Item 控件锚点必须为如图 使用方式 只举例常用列表 其他列表查看 GIt
  • JDE(Towards Real-Time Multi-Object Tracking)代码训练——小白必看

    前言 自己在跑JDE多目标跟踪代码时 总结的方法和教训 一 数据集制作 1 可直接下载作者给的数据集 是制作好的 论文链接 https arxiv org pdf 1909 12605v1 pdf 代码链接 https github com
  • 如何使用oracle修改表字段长度

    系列文章目录 ORACLE简介 Oracle是一种关系数据库管理系统 RDBMS 广泛应用于企业应用程序中 它是由甲骨文公司在20世纪70年代末开发的 自此成为世界上最流行的数据库系统之一 Oracle以其可扩展性 可靠性和安全性而闻名 它
  • USB无线网卡的用途及编程实现

    USB无线网卡是一种设备 它可以通过USB接口连接到计算机 并提供无线网络连接功能 在本文中 我们将探讨USB无线网卡的用途以及如何通过编程实现相关功能 用途 提供无线网络连接 USB无线网卡允许计算机通过无线信号连接到网络 这对于那些没有
  • 【Java】------- Base64格式图片保存到服务器文件

    一 使用技术 Java Springboot 二 代码实例 fun base64ToImage base64转成图片格式 提示 data image png base64 的前缀要去掉 param imgBase64 base64 数据 p
  • Griffin 数据管理任务的SQL和原理

    文章目录 各种Measure内部计算原理 accuracy completeness distinct timeliness uniqueness profiling spark sql pre proc Service 任务管理模块 配置
  • JUC常用到的类

    JUC java util concurrent 并发包中包含了许多并发编程中需要用到的类 锁 如ReentratLock ReadWriteLock ReentrantLock重入锁 可以替代synchronized使用 并且有更多强大的
  • 在windows内使用virtualbox搭建安卓x86--以及所遇到的问题解决--3

    一 ARM兼容包的植入 1 下载arm包 2 安装arm兼容包 3 验证arm兼容包是否移植成功 二 触屏无效 三 玩游戏卡顿严重 一 ARM兼容包的植入 在AndroidX86系统内大部分应用 国内 并没有适配X86架构 安装基于arm架
  • Python实验作业

    Python实验作业 1 实验题目 中文数字对照表 输入一个数字 转换成中文数字 比如 1234567890 gt 壹贰叁肆伍陆柒捌玖零 chinese number 零 壹 贰 叁 肆 伍 陆 柒 捌 玖 numeber input 请输
  • Vue-组件

    Vue 组件 组件之间的父子关系 使用组件的三个步骤 私有组件 通过components 注册的是私有子组件 全局组件 在vue 项目的main js 入口文件中 通过Vue component 方法 可以注册全局组件 import Vue
  • 【css面试题】实现2栏布局 右侧自适应; 3栏布局 中间自适应

    2栏布局 右侧自适应 flex grid table float div class son1 div
  • ROS 中写 python 的 roslaunch

    文章目录 1 必看教程 快速入门 1 1 快速入门ROS的视频教程 里面有一节是专门讲 roslaunch 的 https www bilibili com video av59458869 1 2 PDF文档 How to create
  • Chisel(四)Scala语法 操作符

    学习更多相关知识 关注博主知乎账号 用户名Trustintruth https www zhihu com people suo yi xin 90 activities Scala追求的是纯粹的面向对象 不推荐不属于面向对象的基本类型及其
  • UnityShader基础(五)——进阶纹理

    一 立方体纹理 立方体纹理是环境映射的一种实现方式 立方体纹理就是立方体的六个面 每个面有一个纹理 一般用于映射出物体周围环境 和基础纹理不同 采样立方体纹理需要一个三维坐标 而这个三维坐标由一条向量与立方体的交点构成 注意采样时 向量是由
  • 印度黑客号称世界第一,结果第二天被中国黑客干掉了

    以往中国黑客 俄罗斯黑客 美国黑客会不时出现在新闻头条里 但现在印度黑客也开始崛起 成为一股不可忽视的力量 由于历史原因 印度在经济上比较依赖欧美 经济联系也比较紧密 印度人在软件开发上有着语言上的优势 例如一个印度中学生把主要精力花在学软
  • Linux教程之文本处理(sed,xargs,wc)

    Linux教程之文本处理 sed xargs wc 适用于 ubuntu 20 04 ubuntu 20 04 是 西柚云 主要使用的操作系统 西柚云官网 sed sed 可以对文件中的文本内容进行过滤和修改 它的原理是逐行读入文本内容 根
  • Mysql数据库drop表不用跑路,表空间传输助你恢复数据

    今天给大家介绍一种 在Mysql数据库中 利用InnoDb的表空间传输功能 帮助你恢复drop的业务表 Mysql表空间传输限制 要使用Mysql数据库表空间传输功能 有2个限制 1 Mysql数据库版本必须在5 6以上 2 Mysql数据
  • 冒泡法详解

    目录 什么是冒泡法 冒泡法思路 代码的实现 什么是冒泡法 冒泡排序 Bubble Sort 是一种计算机科学领域的较简单的排序算法 这个算法的名字由来是因为越小的元素会经由交换慢慢 浮 到数列的顶端 升序或降序排列 就如同碳酸饮料中二氧化碳
  • 大数据和人工智能关系的基本介绍

    人工智能主要有三个分支 1 基于规则的人工智能 2 无规则 计算机读取大量数据 根据数据的统计 概率分析等方法 进行智能处理的人工智能 3 基于神经元网络的一种深度学习 基于规则的人工智能 在计算机内根据规定的语法结构录入规则 用这些规则进
  • 搜索引擎solr系列---多字段匹配的实现方法

    solr可以实现多字段匹配查询的结果 即传入一个条件 可以按照你预选设置好的匹配范围去匹配数据 将匹配到的所有数据返回 比如现在我有如下这样的需求 数据库中fbf表中有多个字段 其中有几个中文字段 现在要求传入汉字 对其中的四个中文字段进行

随机推荐

  • 人脸属性识别 - 使用多任务学习模型在CelebA数据集上进行人脸属性识别任务

    简介 人脸属性识别是计算机视觉领域的一个重要应用 它可以用于人脸检测 人脸识别 表情识别等多个领域 本文将介绍如何使用多任务学习模型在CelebA数据集上进行人脸属性识别任务 我们将使用Python编写代码 并使用PyTorch框架搭建我们
  • 云计算基础架构

    原文地址 http www chinacloud cn show aspx id 15922 cid 12 云计算不仅是技术 更是服务模式的创新 云计算之所以能够为用户带来更高的效率 灵活性和可扩展性 是基于对整个IT领域的变革 其技术和应
  • 基础算法:差分

    题目 输入一个长度为 n 的整数序列 接下来输入 m 个操作 每个操作包含三个整数 l r c 表示将序列中 l r 之间的每个数加上 c 请你输出进行完所有操作后的序列 差分 若数组A a1 a2 a3 数组B b1 b2 b3 满足a1
  • java种语言包在线翻译_Java 实现在线翻译功能 调用微软Bing API

    下面是利用java程序实现翻译功能 调用微软Bing API 注意 代码中的keyId 需要自己申请 2 去申请key 进入http www bing com developers createapp aspx 填写相关的你的应用信息就行了
  • pikachu靶场之暴力破解

    暴力破解 是一攻击具手段 在web攻击中 一般会使用这种手段对应用系统的认证信息进行获取 其过程就是使用大量的认证信息在认证接口进行尝试登录 直到得到正确的结果 为了提高效率 暴力破解一般会使用带有字典的工具来进行自动化操作 理论上来说 大
  • 计算机网络主要分为哪几类?

    通俗地讲 计算机网络就是由多台计算机或其他计算机网络设备通过传输介质和软件物理 或逻辑 连接在一起组成的 从总体上来说 计算机网络的组成基本上包括计算机 网络操作系统 传输介质 可以是有形的 也可以是无形的 如无线网络的传输介质就是空气 和
  • vue-cli搭建项目

    一 全局化安装cnpm 其实对于安装vue cli 使用npm命令和cnpm命令都是可以的 个人觉得使用npm安装的比较慢 而且很可能会因为网络问题而出错 所以还是觉得使用cnpm稳一点 npm install cnpm g registr
  • 第35讲:Xposed+模拟器的详细使用

    如果你对逆向有所涉猎的话 可能听说过 Hook 利用 Hook 技术我们可以在某一逻辑的前后加入自定义的逻辑处理代码 几乎可以实现任意逻辑的修改 在前面的 JavaScript 逆向实战课时我们也初步体会了 Hook 的功效 如果你对 Ho
  • 一 , Element-UI tabs标签实现点击左右箭头 实现左右tab栏按个选中切换(正常是只会切换到后面空白tab栏 不会选中) .........二 , tabs标签切换不同的模板样式

    div class TAb div class xiangzuo i class el icon arrow left i div div
  • cuda c by example - 1

    并行计算大当其道 cuda c 给了开发者与NVIDIA 通用型GPU设备交互的能力 举2个栗子先了解一下 1 枚举设备属性代码 int main void cudaDeviceProp prop int count HANDLE ERRO
  • 面试官:说说CountDownLatch,CyclicBarrier,Semaphore的原理?

    CountDownLatch CountDownLatch适用于在多线程的场景需要等待所有子线程全部执行完毕之后再做操作的场景 举个例子 早上部门开会 有人在上厕所 这时候需要等待所有人从厕所回来之后才能开始会议 public class
  • Storm 踩坑记

    1 storm web ui 不显示 Kafka Spouts Lag 原因分析 vim logs ui log 2023 06 05 16 55 35 206 o a s u TopologySpoutLag qtp931482420 2
  • JDBC连接mysql遇到的问题

    本地安装的mysql是5 7版本 pom中引用的mysql connector java依赖是8 0 11版本 驱动使用Class forName com mysql cj jdbc Driver 连接的url为 jdbc mysql 12
  • android使用C/C++调用SO库

    有时候 我们反编译apk得到一个so库 如果直接使用这个so库的话 必须使用原来so库同样的package名字 才能用 这样人家反编译你的apk 就知道你侵犯了人家的版权 为了达到混淆的目的 我们可以再写一个so库调用人家的so库 即把人家
  • Nessus 扫描问题处理

    Nessus扫描后 如下问题 SSH Weak Key Exchange Algorithms Enabled 和 SSH Server CBC Mode Ciphers Enabled 解决方法如下 修改 etc ssh sshd con
  • 使用JSCH连接Linux系统并执行命令

    一 关于JSCH技术的简单描述 JSCH是SSH的一个纯Java实现 说直白点 就是一个远程连接你其他Linux或者Unix服务器的一个java代码包 其实就是我们使用jsch这个jar包来方便我们编写代码来连接自己linux系统的 SSH
  • Deepdive原理

    Deepdive原理 DeepDive是一种新型数据管理系统 能够从非结构化的文本中提取出结构化的数据 可以在单个系统中解决提取 集成和预测问题 使用户能够快速构建复杂的端到端数据管道 例如黑暗数据BI 商业智能 系统 通过允许用户端到端构
  • 基于Spring Boot垂钓服务系统的设计与实现毕业设计源码071739

    目 录 摘要 1 绪论 1 1 研究背景 1 2研究意义 1 3相关技术介绍 1 4论文结构与章节安排 2 垂钓服务系统需求分析 2 1 可行性分析 2 1 1 技术可行性分析 2 1 2 经济可行性分析 2 1 3 操作可行性分析 2 1
  • java 增加内存_如何增加java虚拟机可以使用的最大内存

    java虚拟机可使用的最大内存是有限制的 缺省值通常为64MB或128MB 如果一个应用程序为了提高性能而把数据加载内存中而占用较大的内存 比如超过了默认的最大值128MB 需要加大java虚拟机可使用的最大内存 否则会出现Out of M
  • 前端踩坑(七)--------------------------react 动态操作className

    前端踩坑 七 react 动态操作className 文章目录 前端踩坑 七 react 动态操作className 问题描述 如何动态修改一个元素的CSS样式呢 一 react 动态操作className 二 设置多个className