从数组中删除标签元素也会删除它后面的标签反应 antd
Removing tag element from array also removes the tag behind it react antd
我在删除后面有另一个标签的标签时遇到问题。例如,如果我有两个蚂蚁标签,我删除了第一个,第二个就消失了,但是当我 console.log 它时,第二个在技术上仍然存在。但是如果我有两个 ant 标签,我先删除第二个标签,它会删除第二个标签,而第一个标签也不会消失。
这是所有与删除标签相关的代码,我使用 mobx 存储,emailTemplate.toEmail 是一个字符串格式的数组,包含用“,”分隔的电子邮件,在 allToEmails 变量中它被拆分成一个实际的数组,我将该变量置于一个状态中,以便我可以对其进行操作。
const allToEmails = emailTemplate && emailTemplate.toEmail ?
emailTemplate.toEmail.replace(/ /g, '').split(",") : [];
const [ toEmails, setToEmails ] = useState(allToEmails);
useEffect(() =>{
emailTemplate.setAttr("toEmail", toEmails.toString());
emailTemplate.save();
},[toEmails]);
const handleRemoveTag = (value) => {
setToEmails(toEmails.filter(email => email !== value));
};
<React.Fragment>
{
toEmails.map( (email, index) => {
return (
<EmailTag
key={index}
email={email}
index={index}
handleEmailChange={handleEmailChange}
handleRemoveTag={handleRemoveTag}
/>
)
})
}
<React.Fragment />
这里是 EmailTag class:
function EmailTag({intl: { formatMessage }, email, index, handleEmailChange,
handleRemoveTag, ...props}) {
const [ isEditing, setIsEditing ] = useState(false);
const [ emailValue, setEmailValue ] = useState(email);
const handleEmailValueChange = (e) => setEmailValue(e.target.value);
if (!isEditing) {
return (
<EmailTagLabel
key={index}
closable={true}
onClose={() => handleRemoveTag(email)}
>
<span
onDoubleClick={() => {
setIsEditing(true);
}}
>
{emailValue}
</span>
</EmailTagLabel>
)
} else {
return (
<EditEmailInput
autoFocus
value={emailValue}
size="small"
onChange={handleEmailValueChange}
onBlur={() => { handleEmailChange(emailValue, index) ? setIsEditing(false) : setIsEditing(true) }}
onPressEnter={() => { handleEmailChange(emailValue, index) ? setIsEditing(false) : setIsEditing(true) }}
/>
)
}
}
export default injectIntl(observer(EmailTag))
我通过用不是索引的东西替换键属性的值来修复它,索引搞砸了。
我在删除后面有另一个标签的标签时遇到问题。例如,如果我有两个蚂蚁标签,我删除了第一个,第二个就消失了,但是当我 console.log 它时,第二个在技术上仍然存在。但是如果我有两个 ant 标签,我先删除第二个标签,它会删除第二个标签,而第一个标签也不会消失。
这是所有与删除标签相关的代码,我使用 mobx 存储,emailTemplate.toEmail 是一个字符串格式的数组,包含用“,”分隔的电子邮件,在 allToEmails 变量中它被拆分成一个实际的数组,我将该变量置于一个状态中,以便我可以对其进行操作。
const allToEmails = emailTemplate && emailTemplate.toEmail ?
emailTemplate.toEmail.replace(/ /g, '').split(",") : [];
const [ toEmails, setToEmails ] = useState(allToEmails);
useEffect(() =>{
emailTemplate.setAttr("toEmail", toEmails.toString());
emailTemplate.save();
},[toEmails]);
const handleRemoveTag = (value) => {
setToEmails(toEmails.filter(email => email !== value));
};
<React.Fragment>
{
toEmails.map( (email, index) => {
return (
<EmailTag
key={index}
email={email}
index={index}
handleEmailChange={handleEmailChange}
handleRemoveTag={handleRemoveTag}
/>
)
})
}
<React.Fragment />
这里是 EmailTag class:
function EmailTag({intl: { formatMessage }, email, index, handleEmailChange,
handleRemoveTag, ...props}) {
const [ isEditing, setIsEditing ] = useState(false);
const [ emailValue, setEmailValue ] = useState(email);
const handleEmailValueChange = (e) => setEmailValue(e.target.value);
if (!isEditing) {
return (
<EmailTagLabel
key={index}
closable={true}
onClose={() => handleRemoveTag(email)}
>
<span
onDoubleClick={() => {
setIsEditing(true);
}}
>
{emailValue}
</span>
</EmailTagLabel>
)
} else {
return (
<EditEmailInput
autoFocus
value={emailValue}
size="small"
onChange={handleEmailValueChange}
onBlur={() => { handleEmailChange(emailValue, index) ? setIsEditing(false) : setIsEditing(true) }}
onPressEnter={() => { handleEmailChange(emailValue, index) ? setIsEditing(false) : setIsEditing(true) }}
/>
)
}
}
export default injectIntl(observer(EmailTag))
我通过用不是索引的东西替换键属性的值来修复它,索引搞砸了。