You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

ReactJS实现列表选中项背景色修改及选中值获取求助

实现时间槽选中高亮与选中值获取

1. 引入状态管理

首先在组件中添加useState来跟踪当前选中的时间:

import { useState, useMemo } from 'react'; // 确保导入useState

在组件内部初始化状态:

const [selectedTime, setSelectedTime] = useState(null);

2. 修改时间项渲染逻辑

给每个时间槽添加点击事件,同时根据是否选中动态切换类名:

{chunks.map((timeslot) => {
  return (
    <div key={timeslot} className="inline">
      {timeslot.map((time) => {
        const isSelected = time === selectedTime;
        return (
          <p
            className={`timeslots ${isSelected ? 'selected' : ''}`}
            key={time}
            onClick={() => setSelectedTime(time)}
          >
            {time}
          </p>
        );
      })}
    </div>
  );
})}

3. 添加选中状态样式

在样式文件中添加选中时的背景色样式:

.timeslots.selected {
  background-color: #2563eb; /* 替换成你需要的背景色 */
  color: #ffffff; /* 可选:调整文字颜色提升对比度 */
  border-radius: 4px; /* 可选:添加圆角优化视觉 */
}

4. 使用选中的值

你可以在组件任意位置调用selectedTime变量,比如提交表单、传递给父组件等:

// 示例:打印选中值
console.log('当前选中时间:', selectedTime);

// 若需传递给父组件,可通过props回调实现
// const { onTimeSelect } = props;
// onClick={() => {
//   setSelectedTime(time);
//   onTimeSelect(time);
// }}

修改后的完整组件代码

const Time = () => {
  const [selectedTime, setSelectedTime] = useState(null);
  const dataTime = useMemo(() => TimeData, []);
  const chunks = useMemo(() => {
    const _chunks = [];
    const tmp = [...dataTime];
    while (tmp.length) {
      _chunks.push(tmp.splice(0, 3));
    }
    return _chunks;
  }, [dataTime]);

  return (
    <div className="Main-Section">
      <div className="First-Section">Time</div>
      <div className="Second-Section">
        <div className="date_title">Wednesday , June 13</div>
        <div className="time_Slots">
          {chunks.map((timeslot) => {
            return (
              <div key={timeslot} className="inline">
                {timeslot.map((time) => {
                  const isSelected = time === selectedTime;
                  return (
                    <p
                      className={`timeslots ${isSelected ? 'selected' : ''}`}
                      key={time}
                      onClick={() => setSelectedTime(time)}
                    >
                      {time}
                    </p>
                  );
                })}
              </div>
            );
          })}
        </div>
        {/* 可选:展示选中结果 */}
        {selectedTime && <div className="selected-tip">已选择:{selectedTime}</div>}
        <div className='new_Date'>PICK A NEW DATE</div>
      </div>
    </div>
  );
};

内容的提问来源于stack exchange,提问作者sundeep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.25 19:33:29