【发布时间】:2023-03-08 15:18:01
【问题描述】:
我正在尝试观看一个名为派对的领域。选择这些字段后,将需要呈现产品列表。我正在使用 react hook 表单,我使用 watch hook 来订阅更改。
<FormProvider {...methods}>
<form onSubmit={handleSubmit(onSubmit)}>
<Select
ref={ref}
options={partyOptions}
value={partyOptions.find(
(c) => c.value === value
)}
onChange={(val: any) => onChange(val.value)}
name={name}
/>
)}
<div className="card-body row">
<ProductContext.Provider value={[product, setProduct]}>
<ProductList partyId={partyId} />
</ProductContext.Provider>
</div>
</form>
在productlist组件上,我将partyId作为props传递,并尝试根据partyId访问API
export function ProductList({ partyId }: { partyId: any }) {
const { control } = useFormContext(); // retrieve all hook methods
const [productOptions, setProductOptions] = useState([] as any);
const productQuery = useQuery("products", () => searchProduct(partyId), {
enabled: partyId !== undefined,
});
if (productQuery.isFetched) {
setProductOptions(
productQuery.data.data.map((d: any) => ({
value: d.id,
label: d.name,
}))
);
}
我收到Too many re-renders. React limits the number of renders to prevent an infinite loop. 有没有不渲染多次的解决方案?
【问题讨论】:
-
看起来一旦
productQuery.isFetched变为真,您将无限调用setProductOptions。您需要添加更多逻辑以确保仅在需要时设置状态。
标签: javascript reactjs react-hooks react-hook-form react-query