reactjs - 在反应中,下拉元素有时不会出现
问题描述
我曾经问过一个与这个项目有关的问题,现在我遇到了另一种情况。
我正在使用 multiselect-react-dropdown 制作一个下拉菜单,该下拉菜单必须采用它应该显示的主题的 _id,并将其传递给 Express API。
它工作正常,问题是它没有显示带有名称的选项,只显示它们的 _id,这就是这段代码所调用的:
async function listActiveSubjectsById() {
const response = await api.get("/subject");
const ids = response.data.subjects.map(({ _id }) => _id);
return ids;
}
我需要它来显示主题名称,但只将它的 ID 传递给 API。一个朋友帮了我,它奏效了。结果就是这样写的。
import React, { useState, useEffect } from 'react';
import { Link } from 'react-router-dom';
import { Multiselect } from 'multiselect-react-dropdown';
const TeacherClassInfo = props => {
const [subjects, setSubjects] = useState();
const [subjectName, setSubjectName] = useState();
let selectedSubject = [];
const onSelect = async (selectedList, selectedItem) => {
let index = await subjectName.indexOf(selectedItem, 0);
const getSubjects = await listActiveSubjectsById();
let subjectsDict =[];
getSubjects.forEach((value) => {
subjectsDict.push(value);
});
selectedSubject.push(subjectsDict[index]);
}
const handleListActiveSubjects = async () => {
setSubjects(subjectName);
}
const handleListActiveSubjectsName = async () => {
const getSubjectsName = await listActiveSubjectsByName();
setSubjectName(getSubjectsName);
}
useEffect((subjectName) => {
handleListActiveSubjects();
handleListActiveSubjectsName();
}, []);
return (
<>
<Multiselect
options={subjects}
isObject={false}
onSelect={onSelect}
onRemove={onRemove}
placeholder={"Quais matérias você leciona? *"}
/>
通过此方法调用主题名称:
async function listActiveSubjectsByName() {
const response = await api.get("/materia");
const names = response.data.subjects.map(({ name }) => name);
return names;
}
问题是有时选项显示,有时不显示,如图所示:
而且我不确定是什么导致了它,但我认为它与 useEffect() 有关,我希望在识别和纠正这个问题方面得到一些帮助,以便它始终显示出来。
非常感谢您的宝贵时间。
解决方案
推荐阅读
- ms-word - 隐藏后台按钮
- html - 如何修复 MaterializeCSS 垂直对齐
- apache-spark - 将 Spark 作业从 Windows 机器提交到远程纱线集群(Unix)
- javascript - Document.body.removeChild() 仅在调试模式下删除模式
- logging - 在 JBoss 7 中使用 Filter-spec 从堆栈跟踪日志中过滤中间件帧
- ios - 用户从打开的网址返回后如何防止屏幕重建
- docker - 使用音量时如何排除子文件夹?
- javascript - 具有超链接的图像地图工具提示在 Internet Explorer 版本 11 中不起作用
- android - 如何在 RecyclerView 适配器中显示材质对话框?
- javascript - 仅当用户完成输入并等待 n 秒时,如何在自定义自动完成中触发 ajax 调用