【问题标题】:TypeError: Cannot read property 'onMonthSelect' of undefined while using "useRef"TypeError:使用“useRef”时无法读取未定义的属性“onMonthSelect”
【发布时间】:2021-08-21 07:14:27
【问题描述】:

我正在尝试在我的反应功能组件中使用 useRef,但是当我尝试访问它时出现错误 “TypeError:使用“useRef”时无法读取未定义的属性“onMonthSelect””。

这是下面的代码

import React, { useRef, useState, useEffect } from "react";
import moment from "moment";
import "react-dates/initialize";
import "react-dates/lib/css/_datepicker.css";
import { SingleDatePicker } from "react-dates";

const SingleDatePickerComponent = () => {
  const monthController = useRef();
  const [createdAt, setCreatedAt] = useState(moment());

  const onDateChange = (createdAt) => {
    console.log(createdAt);
    setCreatedAt(createdAt);
  };

  useEffect(() => {
    console.log(monthController);
    // TODO: check if month is visible before moving
    monthController.current.onMonthSelect(
      monthController.current.month,
      createdAt.format("M")
    );
//In this useEffect i am getting the error
  }, [createdAt]);

  return (
    <div>
      <div style={{ marginLeft: "200px" }}>
      </div>
      <SingleDatePicker
        date={createdAt}
        startDateId="MyDatePicker"
        onDateChange={onDateChange}
        renderMonthElement={(...args) => {
          // console.log(args)
          monthController.current = {
            month: args[0].month,
            onMonthSelect: args[0].onMonthSelect,
          };
          // console.log(monthController)
          return args[0].month.format("MMMM");
        }}
        id="SDP"
      />
    </div>
  );
};

export default SingleDatePickerComponent;

【问题讨论】:

    标签: reactjs use-ref react-dates


    【解决方案1】:

    在初始渲染时尚未设置 ref 值。在访问上使用保护子句或可选链接运算符。

    useEffect(() => {
      // TODO: check if month is visible before moving
      monthController.current && monthController.current.onMonthSelect(
        monthController.current.month,
        createdAt.format("M")
      );
    }, [createdAt]);
    

    useEffect(() => {
      // TODO: check if month is visible before moving
      monthController.current?.onMonthSelect(
        monthController.current.month,
        createdAt.format("M")
      );
    }, [createdAt]);
    

    提供定义的初始参考值也可能会有所帮助。

    const monthController = useRef({
      onMonthSelect: () => {},
    });
    

    【讨论】:

      猜你喜欢
      • 2022-06-10
      • 1970-01-01
      • 2019-07-05
      • 1970-01-01
      • 2020-11-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多