📜  redux 错误 TypeError: (0, _.default) 不是函数. (在 (0, _.default)(), (0, _CounterScreen.default) 是 Object 的一个实例) - Javascript (1)

📅  最后修改于: 2023-12-03 14:47:03.343000             🧑  作者: Mango

Redux错误 TypeError: (0, _.default) 不是函数

当使用redux时,如果出现类似于“TypeError: (0, _.default)不是函数”的错误,这通常是由于使用了错误的import语句或Reducer函数未正确导出。

错误的import语句

在开发应用程序时,import语句是常见的。但是,如果不使用正确的语句导入函数或组件,可能会引起各种意想不到的错误。在这种情况下,这个错误信息可以告诉我们是import语句引起的问题。

例如,假设我们有以下代码:

import Counter from './CounterScreen';
import { incrementCounter } from './counterActions';

function counterReducer(state = 0, action) {
  switch (action.type) {
    case 'INCREMENT':
      return state + 1;
    default:
      return state;
  }
}

const rootReducer = combineReducers({
  counter: counterReducer
});

const store = createStore(rootReducer);

store.dispatch(incrementCounter());

这里我们试图从“CounterScreen”文件中导入“Counter”组件。但是,如果“CounterScreen”文件中没有导出名为“default”的组件,则会出现上述错误。在这种情况下,我们需要使用正确的import语句,例如:

import { Counter } from './CounterScreen';

注意:这里我们使用的是花括号来导入Counter组件,这表明我们正在使用默认导出之外的导入。

导出Reducer函数时出现的问题

另一个可能导致此错误的问题是Reducer函数未正确导出。在这种情况下,我们需要仔细检查文件中的导出。

例如:

function counterReducer(state = 0, action) {
  switch (action.type) {
    case 'INCREMENT':
      return state + 1;
    default:
      return state;
  }
}

export default counterReducer;

在上面的代码中,我们导出了一个名为“counterReducer”的函数,但没有指定导出的函数是我们Reducer函数的默认导出。如果我们在其他文件中使用了不正确的导入语句,就会看到上面的错误。

为了修复这个错误,我们需要通过在导出语句后面添加“default”关键字,告诉导入此函数的其他文件,这是默认导出的Reducer函数:

export default function counterReducer(state = 0, action) {
  switch (action.type) {
    case 'INCREMENT':
      return state + 1;
    default:
      return state;
  }
}

##总结

当使用Redux时,出现类似“TypeError: (0, _.default)不是函数”的错误时,通常是由于错误的import语句导致的或Reducer函数未正确导出。仔细检查import语句和导出函数声明,可以帮助我们找出这些问题并修复它们。