【发布时间】:2021-03-24 00:10:34
【问题描述】:
这是我的 React Hook:
function Student(props){
const [open, setOpen] = useState(false);
const [tags, setTags] = useState([]);
useEffect(()=>{
let input = document.getElementById(tagBar);
input.addEventListener("keyup", function(event) {
if (event.keyCode === 13) {
event.preventDefault();
document.getElementById(tagButton).click();
}
});
},[tags])
const handleClick = () => {
setOpen(!open);
};
function addTag(){
let input = document.getElementById(tagBar);
let tagList = tags;
tagList.push(input.value);
console.log("tag");
console.log(tags);
console.log("taglist");
console.log(tagList);
setTags(tagList);
}
const tagDisplay = tags.map(t => {
return <p>{t}</p>;
})
return(
<div className="tags">
<div>
{tagDisplay}
</div>
<input type='text' id={tagBar} className="tagBar" placeholder="Add a Tag"/>
<button type="submit" id={tagButton} className="hiddenButton" onClick={addTag}></button>
<div>
);
我想要做的是能够为这些学生元素添加一个标签(我有多个,但每个都是相互独立的),并且添加的标签显示在我的显示的标签部分。我还需要通过在输入字段上按 Enter 来触发此操作。
由于我不确定的原因,我必须将 enter 绑定放在 useEffect 中(可能是因为输入元素尚未渲染)。
现在,当我在输入字段中输入文本时,它会正确更新 tags/tagList 变量,但可以通过 console.logs 看到,即使我将标签设置为 useEffect 中的重新渲染条件(以及事实上它也是我的状态之一),我的页面没有使用添加的标签进行更新
【问题讨论】:
标签: reactjs