[英]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.