【问题标题】:Calendar Function Call not working invalid hook call日历函数调用不起作用无效的挂钩调用
【发布时间】:2021-09-09 12:32:52
【问题描述】:

我在尝试将函数传递到日历组件时收到一条错误消息 - 不知道我打算如何调用这个特定的函数来更改正在获取的数据?

这是日历组件,

import React, { useState } from "react";
import DatePicker from "react-datepicker";

import "react-datepicker/dist/react-datepicker.css";
    
export default function DateRange({startDate,endDate,handleChange})  {
  return (
    <DatePicker
      selectsRange={true}
      startDate={startDate}
      endDate={endDate}
      onChange={handleChange}
      withPortal
    />
  );
};

这是具有我想要处理更改功能的文件,

import useSWR from "swr";
import { useMemo, useState, useEffect } from "react";

import { apiRequest } from "../../../util/util";
import { format } from "date-fns";
import groupBy from "lodash/groupBy";
// import get from "lodash/get";



export default function useAnalytics() {
  
  d.setMonth(d.getMonth() - 3);
  const [isLoading, setIsLoading] = useState(false);

  const [dateRange, setDateRange] = useState([d.getTime(), Date.now()]);
  const [startDate, endDate] = dateRange;

      
  const handleChange = (e) => {
    setDateRange(e)
    const { data: sentimentData } = useSWR(
      `xx/xx/xxx-xx-xx?startTime=${startDate}&endTime=${endDate}`,
      fetchSentiment
    );
    return sentimentData
 }

  

  const { data: sentimentData } = useSWR(
    `xx/xx/xx-xx-xx?startTime=${startDate}&endTime=${endDate}`,
    fetchSentiment
  );

  return {
    sentimentData,
   
    handleChange,
    setDateRange,
    startDate,
    endDate,
  };
}

这个get在这里传递给另一个函数,

import useAnalytics from './useAnalytics.js'
export default function Analytics() {
  const {
    sentimentData,
   
    handleChange,
    startDate,
     endDate
  } = useAnalytics();
  return (
    <div className="relative">
      
      <div>
        Calendar
      <DateRange  handleChange = {handleChange} startDate = {startDate} endDate = {endDate} />
      </div>
      ....
  );
}

当它调用该函数时,我收到一个无效的钩子调用错误。

我希望能够更改日期,然后发送查询以更改父函数中可用的数据。不确定当前的设置哪里出错了?

更新

下面的效果非常好!现在用于查询的日期格式错误,

目前正在尝试此代码,

const handleChange = e => {
    setDateRange(e);
    setDateRange(Date(dateRange[0]).getTime(),Date(dateRange[1].getTime()))
  };

这不起作用,因为函数 getTime 不会将值转换为任何值。

这是从日历返回的值,

console.log("type of data: ",typeof startDate,"start Date: ", startDate,"EndDate: ", endDate)

type of data:  object start Date:  Mon Aug 09 2021 00:00:00 GMT+1000 (Australian Eastern Standard Time) EndDate:  Wed Aug 18 2021 00:00:00 GMT+1000 (Australian Eastern Standard Time)

【问题讨论】:

  • 这是useSWR,你从哪里得到useAnalytics 中的startDate 和endDate?
  • StartDate 和 endDate 我已经编辑掉了,但是在上面
  • useSWR是一个next.js函数来执行fetch(fetch函数正常工作)
  • 我把我的答案写在下面,看看有没有帮助。

标签: javascript reactjs


【解决方案1】:

useSWR是一个钩子,而你should not call it inside a function

你可以把它放在你的函数之上:

export default function useAnalytics() {
  d.setMonth(d.getMonth() - 3);
  const [isLoading, setIsLoading] = useState(false);

  const [dateRange, setDateRange] = useState([d.getTime(), Date.now()]);
  const [startDate, endDate] = dateRange;

  const { data: sentimentData } = useSWR(
    `xx/xx/xxx-xx-xx?startTime=${startDate}&endTime=${endDate}`,
    fetchSentiment
  );
//...Rest of your function

并将其从您的 handleChange 中删除:

const handleChange = e => {
  setDateRange(e);
  return sentimentData;
};

【讨论】:

  • 不,意识到我错了,更新答案
  • 你可以把它放在函数体内,每次状态变化它都会去取,试试看,伙计
  • 是的,状态变化可能有问题?如果状态改变并且函数再次运行,则应该再次获取它。
  • 是的,如果我能提供帮助,请告诉我。
  • 嗯。不幸的是,我对此一无所知
猜你喜欢
  • 2021-12-07
  • 1970-01-01
  • 2020-08-13
  • 2021-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-04
  • 1970-01-01
相关资源
最近更新 更多