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

React Hooks中点击筛选按钮后如何重置日期选择器与输入框?

解决筛选后日期选择器和输入框未清空的问题

我瞅了下你的代码,有几个小细节出错导致点击Filter后没法清空输入,咱们一步步来修正:

1. 拼写错误 + 初始state设置问题

首先你定义的初始值变量拼写错了(intaialValue少了个i,应该是initialValue),而且date的state没设置初始值,得和你的初始值保持一致:

const initialValue = { date: null, time: null }; // 修正拼写
const Bookings = () => {
  const [date, setDate] = useState(initialValue.date); // 给date设置初始null
  const [time, setTime] = useState([]); // 保持你原来的初始空数组
  // ... 其他state定义,比如setBookings对应的bookings state
}

2. 请求后错误覆盖筛选state的问题

在getBookingsDateAndTime里,你请求完接口后写了setDate(response)和setTime(response),这会把你的筛选日期/时间直接改成接口响应对象,完全没必要,还会搞乱state,得删掉这两行,只保留设置预订数据的setBookings(response.data.data.bookings)。

3. 正确重置筛选条件

最后重置的时候,要分别给date和time设置初始值,而不是用setDate(initialValue)(因为date是单独的state,不是对象):

const getBookingsDateAndTime = async () => {
  // 先保存当前筛选值,避免重置后请求用错数据
  const selectedDate = date;
  const selectedTime = time;

  try {
    const formattedDate = moment(new Date(selectedDate)).format('YYYY-MM-DD');
    const response = await Axios.get(`http://localhost:4000/bookings/date/${formattedDate}/${selectedTime}`);
    console.log(response.data);
    setBookings(response.data.data.bookings);
    // 这里才是正确的重置操作
    setDate(initialValue.date);
    setTime([]); // 对应你的初始空数组
  } catch (error) {
    // 加个错误处理,避免请求失败后没法继续操作
    console.error('获取预订信息失败:', error);
  }
}

修正后的完整代码片段

const initialValue = { date: null, time: null }; // 修正拼写
const Bookings = () => {
  const [date, setDate] = useState(initialValue.date);
  const [time, setTime] = useState([]);
  const [bookings, setBookings] = useState([]); // 假设你定义了这个state

  const getBookingsDateAndTime = async () => {
    // 可以加个简单校验,避免空请求
    if (!date || time.length === 0) {
      alert('请选择日期和时间');
      return;
    }

    try {
      const formattedDate = moment(new Date(date)).format('YYYY-MM-DD');
      const response = await Axios.get(`http://localhost:4000/bookings/date/${formattedDate}/${time}`);
      console.log(response.data);
      setBookings(response.data.data.bookings);
      // 重置筛选条件
      setDate(initialValue.date);
      setTime([]);
    } catch (error) {
      console.error('筛选预订信息出错:', error);
    }
  }

  return (
    // ... 你的其他JSX内容
    <button type="button" className="btn btn-primary btn-sm" onClick={getBookingsDateAndTime}>Filter</button>
  );
}

这样修改后,点击Filter按钮完成筛选请求后,date和time就会被重置为初始值,日期选择器和输入框也就清空啦。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 16:52:34