next.js “Type”不是具有上下文的Array类型

5w9g7ksd  于 2023-06-05  发布在  其他
关注(0)|答案(1)|浏览(161)

我是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”不是数组类型。
有人知道我哪里做错了吗?
谢谢!

ulydmbyx

ulydmbyx1#

好吧,'UserContextType' * 不是 * 一个数组类型...
这一行:value={[filters, setFilters]}将提供程序的值设置为包含元素filterssetFilters的数组([ ])。
您需要的是一个包含filterssetFilters成员的 * 对象 *。要实现这一点,请将方括号替换为花括号,如:value={{filters, setFilters}}

相关问题