当前位置:首页 > React

react如何做时间搜索框

2026-01-25 16:11:04React

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

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

安装依赖库:

react如何做时间搜索框

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>
  );
};

高级功能实现

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

react如何做时间搜索框

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属性

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

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

相关文章

vue实现时间格式

vue实现时间格式

时间格式化方法 在Vue中实现时间格式化通常使用JavaScript原生方法或第三方库如moment.js或day.js。以下是几种常见实现方式: 使用JavaScript原生方法 // 获取当前时…

react如何获取当前时间

react如何获取当前时间

获取当前时间的几种方法 在React中获取当前时间可以通过多种方式实现,以下是常见的几种方法: 使用JavaScript的Date对象 const currentTime = new Date()…

react如何做app

react如何做app

React 开发移动应用的两种主流方式 React Native 是目前最流行的基于 React 的跨平台移动应用开发框架,允许使用 JavaScript 和 React 语法构建原生应用。其核心原理…

react如何做弹窗

react如何做弹窗

使用 React 创建弹窗的方法 使用 React 内置状态管理 通过 React 的 useState 钩子控制弹窗的显示与隐藏,结合条件渲染实现弹窗效果。 import { useSta…

react如何做title

react如何做title

如何在React中动态设置页面标题 使用React Helmet库可以轻松管理文档头部标签 安装依赖包npm install react-helmet或yarn add react-helmet 在组…

react路由如何做权限校验

react路由如何做权限校验

路由权限校验的实现方法 在React应用中实现路由权限校验通常需要结合路由库(如React Router)和状态管理工具(如Redux或Context API)。以下是几种常见的实现方式: 使用高阶…