如何使用 useEffect

时间:2021-07-05 12:25:55

标签: reactjs fetch

我正在使用 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>
  );
};

因为第一次渲染是空的,我收到了未定义的错误。

3 个答案:

答案 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(...)

应该可以。