【发布时间】:2020-12-14 22:14:50
【问题描述】:
在这个应用程序中,学生数据是从 API 中提取的,可以通过点击卡片上的加号按钮为每个学生添加新标签。
问题:标签在输入后不会立即呈现在屏幕上。它们只会在下拉菜单关闭并再次打开或连续输入多个标签后呈现。
项目和代码可以在这里找到: https://codesandbox.io/s/hatch-frontend-mch-52n67?file=/src/components/views/Card.js:2280-2320
Card.js
// ...
// Submit Handler function:
const submitNewTagHandler = (e) => {
e.preventDefault();
setHasTags(true);
console.log(tags);
setHeightState(
`${content.current.scrollHeight}px`
);
setTags([...tags, newTag]);
updateStudents(tags, index);
setNewTag('');
};
//Tag render:
{hasTags && <Tags student={student} />}
// Tag input:
<form onSubmit={submitNewTagHandler}>
<input
className='add-tag-input'
onChange={(e) => setNewTag(e.target.value)}
value={newTag}
type='text'
placeholder='Add a new tag'
/>
</form>
App.js
// updateStudent is called as update in App.js
// (This updates the main data array called students)
const update = (t, index) => {
setTags(t);
setStudents(
students.map((student, i) => {
// console.log(i, index);
if (i === index) {
console.log(student, tags);
return { ...student, tags };
} else {
return student;
}
})
);
console.log(students);
};
Tags.js
const Tags = (props) => {
return (
<div className='tags'>
{props.student.tags.map((tag, index) => {
return (
<h3 className='tag' key={index}>
{tag}{' '}
</h3>
);
})}
</div>
);
};
我尝试了不同的方法来使用 useEffect 重新渲染标签,但到目前为止都没有成功……
谢谢!
【问题讨论】:
-
好的np!我会添加一些代码!
-
您的
组件是生成列表的组件吗?您的标签道具在哪里传递?你说的下拉列表的组件在哪里。 -
组件树是这样的:App.js > DisplayStudentInfo.js > Card.js > Tags.js
-
如果您不介意,既然您正在寻求帮助解决问题,请更好地标记代码,例如您共享的每个代码的组件名称。
-
代码看起来不错,但我们必须看看您正在渲染的组件是什么。这可能是由于您没有正确传递道具等造成的,如果您不想共享代码,那么我们的帮助将受到限制。
标签: javascript reactjs input render