我是TypeScript的新手,我遇到了一个错误,阻止我构建应用程序。它在本地工作得很好,但是当我试图构建它时,我得到了一个错误。
这是我的上下文文件:
import React, {
useState,
Dispatch,
SetStateAction,
createContext,
} from "react";
type Props = {
children: JSX.Element;
};
type Filters = {
type: string[];
rating: number[];
facilities: string[];
stars: number[];
minPrice: number;
maxPrice: number;
};
type UserContextType = {
filters: {};
setFilters: Dispatch<SetStateAction<Filters>>;
};
const iUserContextState = {
filters: {
type: [],
stars: [],
rating: [],
facilities: [],
minPrice: 0,
maxPrice: 0,
},
setFilters: () => {},
};
export const FilterContext = createContext<UserContextType>(iUserContextState);
export function FilterComponent({ children }: Props) {
const [filters, setFilters] = useState<Filters>({
type: [],
stars: [],
rating: [],
facilities: [],
minPrice: 0,
maxPrice: 0,
});
return (
<FilterContext.Provider value={[filters, setFilters]}>
{children}
</FilterContext.Provider>
);
}
export default FilterComponent;
然而,在我使用上下文的过滤器组件中,我得到一个错误:类型“UserContextType”不是数组类型。
有人知道我哪里做错了吗?
谢谢!
1条答案
按热度按时间ulydmbyx1#
好吧,'UserContextType' * 不是 * 一个数组类型...
这一行:
value={[filters, setFilters]}
将提供程序的值设置为包含元素filters
和setFilters
的数组([ ]
)。您需要的是一个包含
filters
和setFilters
成员的 * 对象 *。要实现这一点,请将方括号替换为花括号,如:value={{filters, setFilters}}