当前位置:首页 > React

react如何做时间搜索框

2026-01-25 16:11:04React

实现时间搜索框的基本步骤

在React中实现时间搜索框通常需要结合日期选择库(如react-datepicker)和状态管理。以下是一个完整的实现示例:

安装依赖库:

npm install react-datepicker @types/react-datepicker

基本时间选择组件

创建一个可复用的时间选择组件:

import React, { useState } from 'react';
import DatePicker from 'react-datepicker';
import 'react-datepicker/dist/react-datepicker.css';

const TimeSearchBox = ({ onSearch }) => {
  const [startDate, setStartDate] = useState(null);
  const [endDate, setEndDate] = useState(null);

  const handleSearch = () => {
    if (startDate && endDate) {
      onSearch({
        start: startDate.toISOString(),
        end: endDate.toISOString()
      });
    }
  };

  return (
    <div className="time-search-container">
      <DatePicker
        selected={startDate}
        onChange={date => setStartDate(date)}
        selectsStart
        startDate={startDate}
        endDate={endDate}
        placeholderText="Start Date"
        dateFormat="yyyy-MM-dd"
      />
      <DatePicker
        selected={endDate}
        onChange={date => setEndDate(date)}
        selectsEnd
        startDate={startDate}
        endDate={endDate}
        minDate={startDate}
        placeholderText="End Date"
        dateFormat="yyyy-MM-dd"
      />
      <button onClick={handleSearch}>Search</button>
    </div>
  );
};

高级功能实现

添加时间范围验证和预设选项:

const TimeSearchBox = ({ onSearch }) => {
  // ...之前的state

  const [error, setError] = useState('');

  const presetRanges = {
    'Today': [new Date(), new Date()],
    'This Week': [
      new Date(new Date().setDate(new Date().getDate() - new Date().getDay())),
      new Date()
    ],
    'Last 30 Days': [
      new Date(new Date().setDate(new Date().getDate() - 30)),
      new Date()
    ]
  };

  const handlePresetSelect = (range) => {
    setStartDate(range[0]);
    setEndDate(range[1]);
  };

  const validateDates = () => {
    if (!startDate || !endDate) {
      setError('Please select both dates');
      return false;
    }
    if (startDate > endDate) {
      setError('Start date cannot be after end date');
      return false;
    }
    setError('');
    return true;
  };

  const handleSearch = () => {
    if (validateDates()) {
      onSearch({
        start: startDate.toISOString(),
        end: endDate.toISOString()
      });
    }
  };

  return (
    <div>
      <div className="preset-ranges">
        {Object.entries(presetRanges).map(([label, range]) => (
          <button key={label} onClick={() => handlePresetSelect(range)}>
            {label}
          </button>
        ))}
      </div>
      {/* DatePicker组件 */}
      {error && <div className="error-message">{error}</div>}
    </div>
  );
};

样式优化

添加基础CSS样式:

.time-search-container {
  display: flex;
  gap: 10px;
  align-items: center;
}

.react-datepicker-wrapper {
  width: auto;
}

.preset-ranges {
  margin-bottom: 10px;
}

.preset-ranges button {
  margin-right: 5px;
  padding: 2px 5px;
}

.error-message {
  color: red;
  margin-top: 5px;
}

与父组件交互

在父组件中使用时间搜索框:

function App() {
  const handleTimeSearch = ({ start, end }) => {
    console.log('Searching from:', start, 'to:', end);
    // 这里可以添加API调用或其他搜索逻辑
  };

  return (
    <div>
      <h1>Data Report</h1>
      <TimeSearchBox onSearch={handleTimeSearch} />
    </div>
  );
}

注意事项

  1. 时区处理:根据需求考虑是否转换为UTC或本地时间
  2. 移动端适配:react-datepicker提供响应式支持
  3. 性能优化:对于频繁重渲染的场景,考虑使用useMemouseCallback
  4. 无障碍访问:确保组件符合WCAG标准,添加适当的ARIA属性

以上实现提供了完整的时间搜索功能,包括日期选择、验证、预设范围和错误处理。可以根据实际需求进一步扩展功能,如添加时间选择、自定义日期格式等。

react如何做时间搜索框

标签: 如何做时间
分享给朋友:

相关文章

jquery时间

jquery时间

jQuery 时间处理 jQuery 本身不提供专门的时间处理函数,但可以通过 JavaScript 的 Date 对象结合 jQuery 的事件和方法来实现时间操作。以下是常见的时间处理需求及实现方…

java如何获取当前时间

java如何获取当前时间

获取当前时间的方法 在Java中,可以通过多种方式获取当前时间。以下是几种常见的方法: 使用 java.util.Date Date currentDate = new Date(); Sys…

vue实现滚动时间

vue实现滚动时间

Vue 实现滚动时间的方法 在 Vue 中实现滚动时间可以通过多种方式完成,以下是几种常见的方法: 使用 CSS 动画和 Vue 数据绑定 通过 Vue 的数据绑定和 CSS 动画结合,可以…

vue 实现时间

vue 实现时间

Vue 实现时间的几种方法 在Vue中实现时间显示或处理时间数据,可以通过多种方式实现,包括原生JavaScript、第三方库或Vue插件。以下是几种常见的方法: 使用原生JavaScript显示当…

java如何获取系统时间

java如何获取系统时间

获取系统时间的方法 在Java中,获取系统时间有多种方法,以下是几种常用的方式: 使用System.currentTimeMillis() long currentTimeMillis = S…

vue实现时间排序

vue实现时间排序

实现时间排序的基本思路 在Vue中实现时间排序通常涉及对数组数据进行排序操作。可以利用JavaScript的Array.prototype.sort()方法结合自定义比较函数来完成。时间数据可以是字符…