当前位置:首页 > 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如何做时间搜索框

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

相关文章

vue实现滚动时间

vue实现滚动时间

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

vue时间跨度实现

vue时间跨度实现

Vue 时间跨度实现方法 使用计算属性计算时间差 通过计算属性可以方便地计算两个日期之间的时间差。需要先定义开始和结束日期,然后在计算属性中进行计算。 computed: { timeDiff…

react 如何做源码分析

react 如何做源码分析

理解React源码结构 React源码托管在GitHub上,主要分为packages目录,包含核心模块如react、react-dom、scheduler等。每个模块功能独立,通过协同工作实现整体功能…

react中如何做跳转

react中如何做跳转

使用 React Router 进行跳转 React Router 是 React 生态中最常用的路由管理库,支持页面跳转和动态路由。以下是几种常见的跳转方式: 安装 React Router…

react 如何处理时间戳

react 如何处理时间戳

时间戳转换为可读格式 使用 new Date() 将时间戳转换为日期对象,再通过内置方法格式化输出。例如显示为 YYYY-MM-DD HH:MM:SS: const timestamp = 162…

react如何根据时间来分类

react如何根据时间来分类

根据时间分类的实现方法 在React中根据时间分类数据通常涉及日期处理、数据分组和动态渲染。以下是几种常见场景的实现方式: 使用数组reduce方法分组 假设有一组带时间戳的数据,需要按天/月/年分…