我正在使用 useState Hook 将 API 数据存储到数组中。当第一次渲染数据时,我得到一个空数组,并且在第一次渲染后我能够得到数据。
实际上,我试图根据数据库中的数字数据行创建一个动态选择下拉列表。
const Groups = () => {
const [userList, setUserList] = useState();
useEffect(() => {
(async () => {
const response = await fetch(
"https://localhost:44316/api/auth/getavailableusers",
{
headers: {
"Content-Type": "application/json",
},
credentials: "include",
}
);
const content = await response.json();
setUserList(content);
})();
}, []);
return (
<React.Fragment>
<select id="multiselectDropdown" multiple>
{userList.content.map((user) => (
<option value={user.userId}>{user.name}</option>
))}
</select>
</React.Fragment>
);
};
因为第一次渲染是空的,我收到了未定义的错误。
答案 0 :(得分:0)
将空数组分配给 userList
const [userList, setUserList] = useState([]);
并尝试使用空检查来避免问题
<select id="multiselectDropdown" multiple>
{userList.length > 0 &&
userList?.content?.map((user) => (
<option value={user.userId}>{user.name}</option>
))}
</select>
答案 1 :(得分:0)
如果您还没有信息,请不要渲染。您应该确保 API 返回了一个值并像这样检查它:
{userList.content.length > 0 ?
<select>
...
</select>
: null}
答案 2 :(得分:0)
更改此代码
{userList.content.map(...)
到
{userList.content?.map(...)
应该可以。