You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在React组件内实现表单中Pill标签对应值的删除功能

功能修复方案

现有代码问题

  • 变量拼写错误:setValues(updatedvalues) 中变量名大小写和上方定义的updatedValues不一致,会直接触发引用报错
  • 状态修改不符合不可变原则:直接赋值updatedValues = values是引用原状态数组,修改时容易引发不可预期的副作用
  • 数据源不同步:你当前用substanceDetails数组渲染Pill组件,但handleChange修改的是values状态,二者没有关联会导致删除后视图不更新

修复步骤

1. 同步初始化状态

如果substanceDetails是接口返回的初始数据,首次加载时把值同步给values作为渲染的唯一数据源:

useEffect(() => {
  if(substanceDetails) {
    // 初始化把substance值同步到values状态
    setValues(substanceDetails.map(item => item.substance))
  }
}, [substanceDetails])

2. 修正handleChange函数

const handleChange = (value, mode) => {
  // 先拷贝原状态生成新数组,遵循不可变原则
  let updatedValues = [...values];
  if (mode === 'remove') {
    updatedValues = updatedValues.filter((elem) => elem !== value);
  } else if (!updatedValues.includes(value)) {
    updatedValues.push(value);
  }
  // 修正变量名大小写
  setValues(updatedValues);
};

3. 调整Pill渲染逻辑,统一用values作为数据源

{values?.map((substanceVal) => (
  <Pill
    registerInput={register}
    optionLabel="substance"
    value={substanceVal}
    key={substanceVal}
    optionName="substance"
    allOptions={["Dexamphetamine", "Ritalin"]}
    handleChange={handleChange}
  />
))}

如果存在重复的substance值,不要用value作为key,给每个选项加唯一id匹配即可避免过滤时误删所有重复项。

内容的提问来源于stack exchange,提问作者LeCoda

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.30 04:57:03