TypeError:TypeError:(0,_reactRedux.useSelector)不是一个函数

时间:2019-11-07 07:14:54

标签: reactjs react-native react-redux

我正在我的React Native应用程序中处理useSelector中的react-redux,出现以下错误:

TypeError: TypeError: (0, _reactRedux.useSelector) is not a function.

我的代码是:

import { useSelector } from 'react-redux';

const availableMeals = useSelector(state => state.meals.filteredMeals);

根据官方文档,这是useSelector的最简单用法,但出现此错误。

以前,我在项目中遇到与Redux相关的另一个错误,但该错误在一整夜后自动得到解决,所以此问题与某些缓存有关吗?

我该如何解决?

这是我的代码:

import React from 'react';
import { useSelector } from 'react-redux';

import { CATEGORIES } from '../data/dummy-data';
import MealList from '../components/MealList';

function CategoryMealScreen(props) {
    const catId = props.navigation.getParam('categoryId');

    const availableMeals = useSelector(state => state.meals.filteredMeals);

    const displayedMeals = availableMeals.filter(meal => meal.categoryIds.indexOf(catId) >= 0);

    return <MealList listData={displayedMeals} navigation={props.navigation} />;
};

CategoryMealScreen.navigationOptions = navigationData => {
    //console.log(navigationData);
    const catId = navigationData.navigation.getParam('categoryId');
    const selectedCategory = CATEGORIES.find(cat => cat.id === catId);

    return {
        headerTitle: selectedCategory.name,
    };
};

export default CategoryMealScreen;

3 个答案:

答案 0 :(得分:1)

useSelector()挂钩仅将函数作为输入,因此要解决您的问题,您必须创建一个处理逻辑的函数,然后在useSelector中调用它。 这是一个示例:

这是es6函数

    const getMeals(state) => {
return state.meals.filteredMeals;
}

然后像下面这样将您的函数传递给useSelector:

const availableMeals = useSelector(getMeals(myState));

您可以将此功能(getMeals)放在当前组件中,甚至可以将其放在减速器中。

答案 1 :(得分:1)

我将react-redux文件中的^5.1.1版本从^7.1.1升级到了package.json

这在我运行时导致上游依赖性错误;

npm安装

我通过将react文件中的16.8.0版本从16.8.3升级到package.json来解决了这个问题。

在那之后,我能够安装两个依赖项并停止在下面接收错误;

TypeError: TypeError: (0, _reactRedux.useSelector) is not a function

答案 2 :(得分:0)

如果您确认 react >= 16.8.3 和 react-redux >= 7.1.1 请尝试以下解决方案。 我的解决方法是安装 metro 软件包版本 0.56.0 。

通过 npm: npm install metro@0.56.0

通过纱线 yarn add metro@0.56.0