[英]getting infinite loop error while setting useState() ReactJs
我有 mutliSelect,我的情況是:當 Value 屬性為 [] 時(multiSelect 組件獲取此屬性),也將我的 useState 設置為 []。
我試着寫這樣的東西:
const [selected, setSelected] = useState([]);
useEffect(() => {
setSelected([]);
}, [Value]);
<Select
style={style}
maxTagCount={0}
maxTagPlaceholder={maxTagPlaceholder}
mode="multiple"
placeholder={placeholder}
showSearch
value={selected} // here I tried to put the Value but not working well
onSelect={(val) => onSelectValueMultiSelect(val, selected, setSelected, options)}
onDeselect={(val) => onDeselectValueMultiSelect(val, selected, setSelected)}>
{childrenOptions}
</Select>
但我得到無限循環錯誤。
值數組包含 arrays 表單過濾器數據,然后單擊“重置過濾器”按鈕,我想重置我的多選字段。
我認為問題在於當 setSelected([]) 調用它時,它會再次渲染 Value,因此 useEffect 會一次又一次地調用。
這是我的多選組件:
import React, { useEffect, useState } from 'react';
import './MultiSelect.scss';
import { maxTagPlaceholder, onSelectValueMultiSelect, onDeselectValueMultiSelect } from '../Services';
import { Select, Checkbox } from 'antd';
const MultiSelect = ({ options, style, onChangeHandle, placeholder, Value }) => {
const [selected, setSelected] = useState([]);
const [childrenOptions, setChildrenOptions] = useState([]);
const { Option } = Select;
const children = [];
useEffect(() => {
options.forEach((option) => {
children.push(
<>
<Option key={option.value}>
<Checkbox className="multi-select-checkbox" checked={selected.some((x) => x === option.value)} />
{option.value}
</Option>
</>
);
});
setChildrenOptions(children);
}, [selected]);
useEffect(() => {
onChangeHandle(selected);
}, [selected]);
useEffect(() => {
setSelected([]);
}, [Value]);
return (
<Select
style={style}
maxTagCount={0}
maxTagPlaceholder={maxTagPlaceholder}
mode="multiple"
placeholder={placeholder}
showSearch
value={selected}
onSelect={(val) => onSelectValueMultiSelect(val, selected, setSelected, options)}
onDeselect={(val) => onDeselectValueMultiSelect(val, selected, setSelected)}>
{childrenOptions}
</Select>
);
};
export default MultiSelect;
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.