也许标题太混乱了,但我的任务本身也很混乱。 我有一个字段,它存储具有某些输入和下拉列表的行。下拉列表已定义值 2024-2021。当我添加一行时,我需要下拉菜单已经从之前保存的年份中预选了前一年。 例如,我保存 2024 年,如果我添加一个新行,它应该已经预先选择了 2023 年。
我尝试添加一个功能,当您按下“保存”按钮时,将之前保存的年份减1,但是效果不佳,当您加载页面时,它就不起作用,您选择一个,然后选择了上一个,但下一个不再起作用,并且保持同一年。 这是我的函数的一个例子 `const changeItem = ({ 组, 数组, 索引, setFieldValue, 只读 }) => { const [错误,setError] = useState(''); const [errorYear, setErrorYear] = useState('');
const [loading, setLoading] = useState(false);
const emptyYear = {
year: '',
q1: '',
q2: '',
q3: '',
q4: ''
};
const handleAddYear = (push, years) => {
let yearToAdd = currentYear - 1
let savedYears = years
.filter(year => year.isSaved && year.year)
.map(year => parseInt(year.year))
.sort((a, b) => a - b);
while(savedYears.includes(yearToAdd)) {
yearToAdd--;
}
const newYear = { ...emptyYear, year: yearToAdd.toString() };
push(newYear);
};`
<Button disabled={readOnly} buttonType={BUTTON_TYPE_CLASSES.TextButton} size="small" color="blue" {...console.log(year.year)} onClick={() => handleAddYear(push, right.years)} > Add </Button>
这是我的第一篇文章,如果我不太清楚或没有提出正确的问题,请抱歉。谢谢您的宝贵时间
我认为这应该可以解决问题:
const handleAddYear = (push, years) => {
const savedYears = years
.filter((year) => year.isSaved && year.year)
.map((year) => parseInt(year.year))
.sort((a, b) => a - b);
let yearToAdd = savedYears.length > 0 ? savedYears[0] - 1 : new Date().getFullYear() - 1;
while (savedYears.includes(yearToAdd)) {
yearToAdd--;
}
const newYear = { ...emptyYear, year: yearToAdd.toString() };
push(newYear);
};