React中的state管理

2023-11-03

实现如上的点击变色。

 

父组件

class StarRating extends React.Component{
  constructor(props) {
    super(props)
    this.state = {
      starsSelected: props.starsSelected
    }
    this.change = this.change.bind(this)
  }

  change(starsSelected) {
    this.setState({starsSelected})
  }

  render() {
    const {totalStars} = this.props;
    const {starsSelected} = this.state;
    return(
      <div className="star-rating">
        {
          [...Array(totalStars)].map((n,i) => 
            <Star key={i} selected={i<starsSelected} onClick={() => this.change(i+1)}/>
          
          )
        }
        <p>{starsSelected} of {totalStars}</p>
      </div>
    )
  }
}

StarRating.propTypes = {
  totalStars: PropTypes.number
}

StarRating.defaultProps = {
  totalStars: 5
}

上述为ES6 类创建组件

第二种 createClass创建组件(React15)

const StarRating = createClass({
  display: "StarRating",
  propTypes: {
    totalStars: propTypes.number
  },
  getDefaultProps() {
    return {
      totalStars: 5
    }
  },
  getInitialState() {
    return {
      starsSelected: 0
    }
  },
  change(starsSelected) {
    this.setState({starsSelected})
  },
  render() {
    const {totalStars} = this.props;
    const {starsSelected} = this.state;
    return(
      <div className="state-rating">
        {
          [...Array(totalStars).map((n,i) => {
            <Star key={i} selected={i<starsSelected} onClick={() => this.change(i+1)}/>
          }
          )]
        }
        <p>{starsSelected} of {totalStars}</p>
      </div>
    )
  }
})

 

每个五角星的子组件

const Star = ({selected=false,onClick=f=>f}) => 
  <div className={ selected ? 'star selected' : 'star'} onClick = {onClick}></div>

  Star.propTypes = {
    selected: PropTypes.bool,
    onClick: PropTypes.func
  }

上述为无状态函数组件

 

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8" />
<title>Hello React!</title>
<script src="https://cdn.staticfile.org/react/16.4.0/umd/react.development.js"></script>
<script src="https://cdn.staticfile.org/react-dom/16.4.0/umd/react-dom.development.js"></script>
<script src="https://cdn.staticfile.org/babel-standalone/6.26.0/babel.min.js"></script>
<script src="https://cdn.bootcss.com/prop-types/15.6.1/prop-types.js"></script>
<style>
  .star{
    cursor: pointer;
    height: 25px;
    width: 25px;
    margin: 2px;
    float: left;
    background-color: grey;
    clip-path: polygon(
      50% 0%,
      63% 38%,
      100% 38%,
      69% 59%,
      82% 100%,
      50% 75%,
      18% 100%,
      31% 59%,
      0% 38%,
      37% 38%
    )
  }
  .star.selected{
    background-color: red;
  }
  p{
    float:left;
    margin-left: 20px;
    margin-top: 4px;
  }
</style>
</head>




<body>
<div id="example"></div>
<script type="text/babel">
const Star = ({selected=false,onClick=f=>f}) => 
  <div className={ selected ? 'star selected' : 'star'} onClick = {onClick}></div>

  Star.propTypes = {
    selected: PropTypes.bool,
    onClick: PropTypes.func
  }

// const StarRating = createClass({
//   display: "StarRating",
//   propTypes: {
//     totalStars: propTypes.number
//   },
//   getDefaultProps() {
//     return {
//       totalStars: 5
//     }
//   },
//   getInitialState() {
//     return {
//       starsSelected: 0
//     }
//   },
//   change(starsSelected) {
//     this.setState({starsSelected})
//   },
//   render() {
//     const {totalStars} = this.props;
//     const {starsSelected} = this.state;
//     return(
//       <div className="state-rating">
//         {
//           [...Array(totalStars).map((n,i) => {
//             <Star key={i} selected={i<starsSelected} onClick={() => this.change(i+1)}/>
//           }
//           )]
//         }
//         <p>{starsSelected} of {totalStars}</p>
//       </div>
//     )
//   }
// })


class StarRating extends React.Component{
  constructor(props) {
    super(props)
    this.state = {
      starsSelected: props.starsSelected
    }
    this.change = this.change.bind(this)
  }

  change(starsSelected) {
    this.setState({starsSelected})
  }

  render() {
    const {totalStars} = this.props;
    const {starsSelected} = this.state;
    return(
      <div className="star-rating">
        {
          [...Array(totalStars)].map((n,i) => 
            <Star key={i} selected={i<starsSelected} onClick={() => this.change(i+1)}/>
          
          )
        }
        <p>{starsSelected} of {totalStars}</p>
      </div>
    )
  }
}

StarRating.propTypes = {
  totalStars: PropTypes.number
}

StarRating.defaultProps = {
  totalStars: 5
}

ReactDOM.render(<StarRating totalStars={7} starsSelected={3}/>,document.getElementById("example"))
</script>

</body>
</html>

 

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

React中的state管理 的相关文章

  • 重要前端面试题,来自一个2022年面试大牛(下)

    五 React 1 react 函数组件和 class 组件区别 类组件视图是怎么更新的呢 首先第一次渲染的时候 会创建一个类的实例 之后在更新的时候 仅仅按照生命周期流程调用render 实例不会变 而函数式组件每次渲染更新都会重新执行调
  • 前端例程20220818:边框跑马霓虹灯效按钮

    演示 原理 按钮使用阴影实现外发光效果 按钮设置倒影效果 使用四个块元素以按钮为基础绝对定位到上下左右四边作为边框 通过给边框元素设置动画 并设置动画时间差以实现边框跑马效果 代码
  • C# 火山引擎 语音合成 HTTP接口调用方法

    官方没有提供C demo 且文档有可能看不懂 这里记录下调用方法 C 代码 WebClient wc new WebClient string appid 应用的APPID string uid 账号的uid string voice ot
  • 蓝桥杯 Python 组省赛夺奖班-3.1 数组

    一 区间修改 区间求和 题目 思路 可以使用暴力法进行模拟但是不能全过 听讲解是要用线段树 唉不会的知识太多了 等学了回来补坑 代码 暴力法 n m map int input split a list map int input spli
  • SSL_connect returned=1 errno=0 state=error: certificate verify failed

    起因 起因是这样的 我昨天使用 gem 安装 irb 的时候出现了下面这个错误 root master gem install irb ERROR Could not find a valid gem irb gt 0 here is wh
  • STM32之IIC

    IIC协议 IIC全称Inter Integrated Circuit 集成电路总线 由PHILIPS公司在80年代开发的两线式串行总线 用于连接微控制器及其外围设备 IIC属于半双工同步通信方式 IIC构成 IIC串行总线有两根信号线 一
  • 【VUE】vue3+vite中process.env的配置方法

    问题详情 在request js中 使用process env BASE API 需要对请求路径进行全局配置 创建axios实例 const service axios create baseURL process env BASE API
  • 生成新SSH密钥并添加到ssh-agent

    生成命令 ssh keygen t ed25519 C your email example com 回车3次后生成 查看公钥 cat ssh id ed25519 pub 进入ssh页面 https github com settings
  • 16.python的文件处理

    应用程序运行过程中产生的数据最先都是存放于内存中的 若想永久保存下来 必须要保存于硬盘中 应用程序若想操作硬件必须通过操作系统 而文件就是操作系统提供给应用程序来操作硬盘的虚拟概念 用户或应用程序对文件的操作 就是向操作系统发起调用 然后由
  • vue 富文本编辑器使用

    环境 在vue TS 中使用富文本编辑器 markdown文本编辑器更加适合开发者使用 普通用户更适合类似word的使用方式 所见即所得 推荐使用的富文本编辑器 ckeditor5 内置插件和扩展性非常好 quill medium edit
  • 黑盒测试、白盒测试、灰盒测试

    1 黑盒测试 黑盒测试也称功能测试 它是通过测试来检测每个功能是否都能正常使用 在测试中 把程序看作一个不能打开的黑盒子 在完全不考虑程序内部结构和内部特性的情况下 在程序接口进行测试 它只检查程序功能是否按照需求规格说明书的规定正常使用
  • uniapp中使用swiper无法触发触底生命周期onReachBottom

    使用swiper导致onReachBottom生命周期不会触发 解决办法 使用scroll view的scrolltolower方法 具体使用
  • 【单片机毕业设计】【mcuclub-dz-079】基于单片机的火灾检测控制系统设计

    最近设计了一个项目基于单片机的火灾检测控制系统设计 与大家分享一下 一 基本介绍 项目名 火灾检测 项目编号 mcuclub dz 079 单片机 STC89C52 功能简介 1 通过MQ 7检测CO值 当CO值大于设置最大值 进行声光报警
  • NMOS管和PMOS管使用区别之一

    使用的位置 NMOS管在电路中常做下管使用 PMOS管在电路中常做上管使用 VCC叫上 GND叫下 NMOS管在电路中常做下管使用 S端接GND D端接负载 负载再接VCC PMOS管在电路中常做上管使用 S端接VCC D端接负载 负载再接
  • 纯手工gcc 编译android native Cpp代码

    纯手工gcc 编译android native Cpp代码 api level 19 32位 编译成功 api level 19 home charlie android tool android ndk r10e toolchains a
  • MySQL-MVCC原理以及数据库锁实战

    多个事务并发对同一批数据进行增删改查操作时 可能会导致脏写 脏读 不可重复读 幻读问题 MySQL为解决这些问题 设计了事务隔离级别 锁机制 MVCC多版本并发控制隔离机制来解决这些问题 锁与事务隔离级别 事务隔离级别 读未提交 Read
  • OpenCV图像增强(二)——Retinex图像增强

    前言 1 Retinex图像增强是一种高动态范围图像的新色调映射技术 而基础理论是 物体的颜色是由物体对长波 红色 中波 绿色 短波 蓝色 光线的反射能力来决定的 而不是由反射光强度的绝对值来决定的 物体的色彩不受光照非均匀性的影响 具有一
  • 计算机网络技术期末个人总结

    计算机网络技术复习 一 计算机网络基础知识 了解 计算机网络 Internet 的发展 面向终端的计算机网络 单个计算机 直接连接主机 分组交换网络 实现了不同计算机之间的通信 此时广域网从逻辑上分为资源子网与通信子网 ARPANET出现

随机推荐

  • 吊打面试官系列之:UI自动化面试题汇总,对标P7,从此再也不怕面试官了。

    UI自动化面试题汇总 1 引言 2 基础篇 2 1 selenium的工作原理 2 2 selenium自动化页面元素找不到存在异常的原因 2 3 如何去定位属性动态变化的元素 2 4 如何去定位页面上动态加载的元素 2 5 seleniu
  • MT【332】椭圆正交变换

    2018河南数学联赛解答10 已知方程 17x 2 16xy 4y 2 34x 16y 13 0 表示椭圆 求它的对称中心和对称轴 解 设对称中心为 a b 显然 A 1 1 B 1 1 在图像上 所以对称点 A 2a 1 2b 1 B 2
  • 【集合】hashmap的实现原理,hashmap怎么解决哈希冲突的问题

    最近在详细的研究hashmap的内部结构和原理 终于豁然开朗 原来hashmap是那么的完美 数组和链表的结合体 在学习hashmap之前 首先问大家几个问题 看看是否对hashmap有了解多少 咱们通过问题进行对hashmap的学习和探索
  • 金融信创快速落地的应用迁移或创新开发要点

    转载本文请注明出处 微信公众号EAWorld 近日 汇聚专家智慧 分解转型实战的 重塑 直播栏目再上新 本期聚焦金融信创 解析推进金融信创快速落地的应用迁移或创新开发要点 访谈问题概览 1 与其他行业信创相比 金融信创有哪些难点 2 金融信
  • python学习--计算学生成绩排名案例(字典篇2) --小黑学习驿站

    目录 问题 额外话题 zip 函数 sorted 函数 问题 创建学生期末成绩自动排名 如何查找对应的学生学习成绩 思路 1 首先总分为未知数 定义学生数量 将语数英各科成绩分开 然后计算总成绩 2 计算出总成绩 然后进行排序 3 然后定义
  • 【Python】怎么在pip下载的时候设置镜像?(常见的清华镜像、阿里云镜像以及中科大镜像)

    一 清华镜像 在使用 pip 命令下载 Python 包时 可以通过设置 pip 的镜像源为清华镜像来加快下载速度 以下是如何设置清华镜像源的步骤 打开终端或命令行窗口 执行以下命令添加清华镜像源 pip config set global
  • 如何在Windows中安装Oracle数据库12c

    摘要 本教程逐步向您展示如何在Windows 12中安装Oracle数据库10c 安装甲骨文数据库 要在计算机上安装 Oracle 数据库 您需要从 Oracle 网站的下载页面下载安装程序 拥有ZIP格式的安装文件后 您需要将它们解压缩到
  • 百天百题(1/100)Java创建线程的方式?

    首先创建线程有四种种方式 1 继承Thread类 缺点 1 Java是不支持多继承的 所以我们不能在继承其他的类了 2 不能通过线程池来此操作 每次创建一个线程都需要先创建一个类 创建和销毁线程对整体的资源开销是非常大的 3 每次启动一个线
  • 局域网中服务器群配置ssh免密

    笔者以前配置ssh免密登陆 基本两步就可以了 ssh keygen删除密钥对 ssh copy id公钥复制到远程主机 完成密钥对部署 但是笔者寻思 在服务器群里面怎么来配置ssh免密呢 生成密钥对 然后多次使用ssh copy id分发公
  • Linux驱动开发-------- 内核的同步与互斥

    面试 请说一下 线程间同步方式有哪些 同一进程内的多个线程共享同一地址空间 为了避免多个线程同时访问数据造成的混乱 需要考虑线程之间的同步问题 所谓同步 即协同步调 按预定的先后次序访问共享资源 以免造成混乱 线程同步的实现方式主要有6种
  • java读取一个指定目录下的文件名,不递归读取

    public static ArrayList
  • electron-updater

    前提备份 安装一下更新插件 npm install electron updater save app Electron electronjs org 更多配置参考app Electron electronjs org 自动更新 elect
  • 2020及2021年常被利用的30个软件漏洞

    对于所有的0day 定制的恶意软件和其他完全未知的安全漏洞 它们已经存在多年并被广泛利用 为了更好地表明这一点 美国联邦调查局 FBI 美国网络安全与基础设施安全局 CISA 澳大利亚网络安全中心 ACSC 和英国国家网络安全中心 NCSC
  • 『PyQt5-Qt Designer篇』| 08 Qt Designer中容器布局和绝对布局的使用

    08 Qt Designer中容器布局和绝对布局的使用 1 容器布局 1 1 设计容器布局 1 2 保存文件并执行 2 绝对布局 2 1 设计绝对布局 2 2 保存文件并执行 1 容器布局 1 1 设计容器布局 先拖入一个容器Frame容器
  • for循环数组遍历,引出增强for循环(forEach)

    这是一个传统的遍历数组元素的for循环结构 本例中的计数器为数组元素的索引 一般初始化为0 进入循环体的表达式一般写为 索引小于被遍历数组的长度 每次循环执行结束后会对索引进行加1操作 1 这是最简单的遍历 public class Dem
  • 毕业设计-基于微信小程序的垃圾分类系统

    目录 前言 课题背景与简介 实现设计思路 一 垃圾分类系统设计 二 垃圾分类系统开发技术分析 三 总结 实现效果样例 更多帮助
  • NLP学习(五)jieba分词-Python3实现

    中文分词 对于NLP 自然语言处理 来说 分词是一步重要的工作 市面上也有各种分词库 11款开放中文分词系统比较 1 基于词典 基于字典 词库匹配的分词方法 字符串匹配 机械分词法 2 基于统计 基于词频度统计的分词方法 3 基于规则 基于
  • LLVM里的寄存器分配 - 线性扫描算法(二)

    1 背景介绍 在上一篇博文 LLVM 里的寄存器分配 准备工作 一 里 我主要整理了 LLVM 在做寄存器分配前所做的准备工作 介绍了 LLVM 是在怎样的 MIR 上做的寄存器分配 接下来 就需要讲讲 LLVM 是如何做寄存器分配了 虽然
  • 对比加速CDN,高防CDN有什么优势呢

    与加速的CDN相比 高防CDN优势可以归纳为 自动化 引导式自助 错误冲突及时提醒 操作高效便捷 配置项丰富 自动配置缓存策略 多业务支持 支持网页 下载 点播等多种业务类型 满足用户多元化业务需求 可谓是大文件 小文件 点播 直播 动静皆
  • React中的state管理

    实现如上的点击变色 父组件 class StarRating extends React Component constructor props super props this state starsSelected props star