gpt4 book ai didi

javascript - 从组件内的表单中删除值

转载 作者:行者123 更新时间:2023-12-05 00:27:37 24 4
gpt4 key购买 nike

我试图让用户从当前设置中删除值。
我有一系列值,用户可以拥有以药丸格式显示的设置,他们可以单击 X 删除,即

export default function Pill({ value, handleChange }) {

// const [times, setTimes] = useState([]);

return (
<div className="bg-gray-600 text-white text-xs px-2 py-0.5 w-max-content rounded-lg align-middle mr-1 mb-1">
{value}
<svg
xmlns="http://www.w3.org/2000/svg"
width="16"
height="16"
viewBox="0 0 24 24"
fill="none"
stroke="currentColor"
strokeWidth="2"
strokeLinecap="round"
strokeLinejoin="round"
className="inline-block align-middle cursor-pointer"
onClick={() => handleChange(value, "remove")}
>
<line x1="18" y1="6" x2="6" y2="18" />
<line x1="6" y1="6" x2="18" y2="18" />
</svg>
</div>
);
}
这用作如下组件,
{substanceDetails &&
substanceDetails.map((subst) => (
<Pill
registerInput={register}
optionLabel="substance"
value={subst.substance}
key={subst.substance}
optionName="substance"
allOptions={["Dexamphetamine", "Ritalin"]}
handleChange={handleChange}
/>
))}
鉴于需要更改的句柄更改,但它看起来像这样,
const handleChange = (value, mode) => {
let updatedValues = values;
if (mode === 'remove') {
updatedValues = values.filter((elem) => elem !== value);
} else if (!updatedValues.includes(value)) updatedValues = [...values, value];
setValues(updatedvalues);
};

最佳答案

突变问题
您的 handleChange 中的状态正在发生变异功能:

const handleChange = (value, mode) => {
let updatedValues = values; //takes the reference to state variable
if (mode === 'remove') {
updatedValues = values.filter((elem) => elem !== value); //mutation
} else if (!updatedValues.includes(value)) updatedValues = [...values, value];
setValues(updatedvalues);
};
你可以使用这样的东西:
const handleChange = (value, mode) => {
if(mode==="remove") setValues(vals => vals.includes(value) ? vals.filter(v => v !== value) : [...vals, value])
};
如果它是一个对象数组: .includes()如果您的数组元素不是原始值,则不会按预期工作。您可以使用 .find().some()在这种情况下:
字段过滤示例 duration为简单起见:
const handleChange = (value, mode) => {
if(mode==="remove") setValues(vals => vals.find(v=> v.duration === value.duration) ? vals.filter(v => v.duration !== value.duration) : [...vals, value])
};

关于javascript - 从组件内的表单中删除值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69554059/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com