TypeError: Object(...) is not a function reactjs

Posted

技术标签:

【中文标题】TypeError: Object(...) is not a function reactjs【英文标题】: 【发布时间】:2019-01-30 12:32:41 【问题描述】:

我试图通过将 fillCalendar() 从组件的方法中提取到它自己的 js 文件中并导入它来清理这个反应组件。最初 this.state.datesArray 是在 componentWillMount() 生命周期方法中设置的。现在我试图在构造函数中直接初始化它,因为这是反应文档recommends 的内容。现在这样做会引发“TypeError: Object(...) is not a function”错误,我不知道为什么。这是 Calendar.js 使用的样子 see here。

日历.js

import React,  Component  from 'react';
import  fillCalendar  from '../calendar.tools'

class Calendar extends Component 
  constructor(props) 
    super(props)
    this.state = 
      datesArray: fillCalendar(7, 2018),
      date: new Date(),
      monthIsOffset: false,
      monthOffset: new Date().getMonth(),
      yearOffset: new Date().getFullYear()
    
  
  render() 
    return (
      ...
    )
  

calendar.tools.js

let fillCalendar = (month, year) => 
  let datesArray = []
  let monthStart = new Date(year,month,1).getDay()
  let yearType = false;
  let filledNodes = 0;
  // Check for leap year
  (year%4 === 0) ? 
    (year%100 === 0) ?
      (year%400) ? yearType = true : yearType = false : 
    yearType = true : 
  yearType = false
  const monthArrays = yearType ? [31,29,31,30,31,30,31,31,30,31,30,31] : [31,28,31,30,31,30,31,31,30,31,30,31]
  if (month === 0)  month = 12; 
  let leadDayStart = monthArrays[month-1] - monthStart + 1
  // Loop out lead date numbers
  for (let i = 0; i < monthStart; i++) 
    datesArray.push(date: leadDayStart, type: "leadDate", id: "leadDate" + i)
    leadDayStart++
    filledNodes++
  
  if (month === 12)  month = 0; 
  // Loop out month's date numbers
  for (let i = 0; i < monthArrays[month]; i++) 
    datesArray.push(date: i + 1, type: "monthDate", id: "monthDate" + i)
    filledNodes++
  
  // fill the empty remaining cells in the calendar
  let remainingNodes = 42 - filledNodes;
  for (let i = 0; i < remainingNodes; i++) 
    datesArray.push(date: i + 1, type: "postDate", id: "postDate" + i)
  
  return datesArray

【问题讨论】:

【参考方案1】:

看起来不错,您只需 export 您的函数即可。

使用

export let fillCalendar = (month, year) => 

而不是

let fillCalendar = (month, year) => 

【讨论】:

【参考方案2】:

只是把它放在那里....

我看到这个错误是因为我从错误的模块中导入了一个函数!

但我敢肯定你永远不会那样做 ;-)

(显然有点不走运,因为我导入的函数有一个通用名称 - 在我的例子中是 useParams

【讨论】:

对我来说类似,但我正在像 named 导入一样进行导入,而实际上它应该是默认输入端口 这里也一样——我从“react/cjs/react.development”而不是“react”导入了一个 React 钩子。【参考方案3】:

除了accepted answer,我观察到这个错误更普遍地发生在导入的模块/对象不存在时。我在尝试导入已删除该组件的库的组件时遇到了它。就我而言,特定组件是FirebaseRealTimeSaga,即React Admin Firebase 包中的no longer available

【讨论】:

@Théophile 已修复【参考方案4】:

高阶组件示例

声明后直接导出函数

export default function Authorized(WrappedComponent) 


【讨论】:

【参考方案5】:

意外调用我导出的函数导致了同样的错误。

// Bad! The () invokes the getFaq function.
export default getFaq();

“Object(…) 不是函数”

// Good! getFaq is not invoked.
export default getFaq;

【讨论】:

【参考方案6】:

由于文件扩展名不正确,我遇到了“Object(...) is not a function”错误。

在文件扩展名中添加“.js”解决了这个错误。

【讨论】:

【参考方案7】:

我也收到了object(...) is not a function。原因是我从 react 导入 useSelector,而不是从 react-redux 导入。连续状态半小时后发现。

【讨论】:

【参考方案8】:

如果一切正常,请确保您要从中导出的文件实际保存了您的最新更改。

通常会发生此错误,因为您实际上并未导入该函数。我确认我正在正确导出我的函数并正确导入它,以及所有其他一般“陷阱”。

经过三十分钟的分析,我才意识到我实际上并没有Save 包含新添加的export 代码的文件!所以确实,该函数没有导入 - 但不是由于代码错误,而是由于人/IDE问题。我只是忘了打Ctrl+S 并且从未注意到Visual Studio Code 中我的文件上的“未保存的更改”点。

听起来很明显 - 但我知道这会帮助像我这样可能错过显而易见的人。

【讨论】:

【参考方案9】:

当我尝试在其中一个项目中使用 hooks(特别是:useState())和旧版本的 react 时,我遇到了同样的错误。

基于对 package.json 的依赖关系,我有它的 react 版本 16.2.0

在我的情况下,发生此错误是因为 Hooks 是从以下版本开始使用的:React 16.8

下面我也用截图来描述一下情况。

【讨论】:

【参考方案10】:

大家好,我遇到了同样的问题 Object(...) is not a function。 (在构建环境中)如果它在开发中为您工作但不构建,这就是解决方案。

事实证明,就我而言,我使用的是 react Hooks: useState,useContext... 来自 react 的开发版本

import  useContext  from 'react/cjs/react.development';

这一行是导致问题的原因,只需将其更改为:

import  useContext  from 'react';

这将解决问题。

【讨论】:

【参考方案11】:

你必须像这样导入 fillCalendar。

import fillCalendar from '../calendar.tools'

所以你必须删除 import 语句中的大括号。

【讨论】:

这不能解决问题。正如其他人指出的那样,这里的答案是我从未导出过该函数。如果您在我的函数前面写了export default,您的答案将是正确的,那么是的,您必须删除花括号。

以上是关于TypeError: Object(...) is not a function reactjs的主要内容,如果未能解决你的问题,请参考以下文章

AngularFireList' TypeError: Object(...) is not a function at SwitchMapSubscriber.project

TypeError: 'method' object is not iterable

计算数字的变体 / TypeError: 'int' object is not callable

TypeError: Object(...) is not a function, 从 firebase 调用数据

离子本地通知 TypeError: Object(...) is not a function

Python: TypeError: 'dict' object is not callable