我正在我的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;
答案 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