React实现div点击选择并变色功能

1.效果

 class写法

import React, { Component } from 'react';
import "./1.css"
class B extends Component {
    province = ["1月","2月","3月","4月","5月","6月",] 
    state={
      selectmonth:[]
    }
    btnclick=(item)=>{
      const {selectmonth=[]}=this.state
        if(!selectmonth.includes(item)){
            this.setState({selectmonth:[...selectmonth,item]},()=>console.log(this.state.selectmonth))
        }
        else{
            const index =selectmonth.findIndex(i =>i==item );
            selectmonth.splice(index,1)
            this.setState({selectmonth:[...selectmonth]},()=>console.log(this.state.selectmonth))
        }
        
    }
    render() {
      const {selectmonth=[]}=this.state
        return (
            <div className="box">
                {this.province?
                this.province.map((item)=>{
                    return(
                        <span 
                        key={item}
                        className={`item_span ${selectmonth.includes(item)?'item_span_choose': ''}` }
                        onClick={()=>{
                          this.btnclick(item)
                        }}>
                        {item}
                        </span>
                    )
                    
                }):null}
            </div>
        );
    }
}

export default B;

 hooks写法

import "./1.css";
import React, { Component, useEffect, useState } from "react";

const A=()=> {
  const [selectmonth, setSelectmonth] = useState([]);
  const province = ["1月", "2月", "3月", "4月", "5月", "6月"];
  const btnclick = item => {
    // 单选
    // if (!selectmonth?.includes(item)) {
    //   setSelectmonth(item);
    //  }
    //  console.log(selectmonth)

    // 全选
    if (!selectmonth?.includes(item)) {
     setSelectmonth([...selectmonth, item]);
    } else {
     const index = selectmonth.findIndex(i => i == item);
     selectmonth.splice(index, 1);
     setSelectmonth([...selectmonth]);
    }
    console.log(selectmonth)
  };

  return (
    <div className="box">
      {province.map(item => {
        return (
         <span
          key={item}
          className={`item_span ${
           selectmonth.length > 0 && selectmonth.includes(item)
            ? "item_span_choose"
            : ""
          }`}
          onClick={() => btnclick(item)}
         >
          {item}
         </span>
        );
      })}
    </div>
  );
}

export default A;

css文件

.box{ 
    display: flex;
    justify-content: flex-start;
    align-items: center;
}
.item_span{
    background-color: #ccc;
    width: 50px;
    height: 50px;
    line-height: 50px;
    margin-left: 10px;
}
.item_span_choose{
    background-color: #4485fe;
}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
可以使用 React 中的 `useState` 钩子来实现选择功能的输入框。具体实现步骤如下: 1. 定义一个状态变量用于存储输入框中的文本,以及一个状态变量用于存储选择的选项。 ```jsx const [inputText, setInputText] = useState(''); const [selectedOption, setSelectedOption] = useState(null); ``` 2. 在输入框 `input` 元素中添加 `onChange` 事件监听器,每当输入框中的文本发生变化时,更新状态变量 `inputText` 的值。 ```jsx <input type="text" value={inputText} onChange={(e) => setInputText(e.target.value)} /> ``` 3. 定义一个选项列表,每个选项都是一个 `button` 元素,点击时设置状态变量 `selectedOption` 的值为当前选项的文本。 ```jsx <div> <button onClick={() => setSelectedOption('Option 1')}> Option 1 </button> <button onClick={() => setSelectedOption('Option 2')}> Option 2 </button> <button onClick={() => setSelectedOption('Option 3')}> Option 3 </button> </div> ``` 4. 在 `input` 元素的下方显示当前选择的选项。 ```jsx {selectedOption && <p>You have selected: {selectedOption}</p>} ``` 5. 最终的代码如下所示: ```jsx import { useState } from 'react'; function SelectableInput() { const [inputText, setInputText] = useState(''); const [selectedOption, setSelectedOption] = useState(null); return ( <div> <input type="text" value={inputText} onChange={(e) => setInputText(e.target.value)} /> <div> <button onClick={() => setSelectedOption('Option 1')}> Option 1 </button> <button onClick={() => setSelectedOption('Option 2')}> Option 2 </button> <button onClick={() => setSelectedOption('Option 3')}> Option 3 </button> </div> {selectedOption && <p>You have selected: {selectedOption}</p>} </div> ); } export default SelectableInput; ```

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值