微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

当我更新子组件的状态变量时,为什么会导致无限循环?

如何解决当我更新子组件的状态变量时,为什么会导致无限循环?

我的代码here

我正在创建一个标题详细信息页面,我想显示员工详细信息表中的第一个员工详细信息。

很遗憾,我遇到了一个奇怪的问题。

为了从服务器获取数据,我需要使用useEffect钩子,所以我必须将数据保存到App.js中的一个状态变量(即staffData)中,然后提交到 StaffManagement 组件。

为了显示员工详细信息表中的第一个员工详细信息,我在 staffDetail 组件中创建了一个状态变量 StaffManagement

当我为状态变量 staffDetail 设置一个值时,这意味着以下语句,

setStaffDetail(staff);

浏览器显示以下消息:

Too many re-renders. React limits the number of renders to prevent an infinite loop.

我在 useEffect 组件中没有 StaffManagement 钩子,为什么会导致无限循环?

解决方法

因为它 setStaffDetail 每次渲染。当 setStaffDetail 调用它触发渲染,那么它 setStaffDetail...你需要把它包装在一个 useEffect

useEffect(() => {
    for (const [staffId,staff] of Object.entries(staffData)) {
      staffList.push(
        <tr key={staffId}>
          <td>{staff.name}</td>
        </tr>
      );
      if (count === 0) {
        setStaffDetail(staff);
      }
    }
},[staffData]);

另一种解决方法是使用 useRef

const count = useRef(0);


for (const [staffId,staff] of Object.entries(staffData)) {
    staffList.push(
      <tr key={staffId}>
        <td>{staff.name}</td>
      </tr>
    );
    if (count.current === 0) {
      count.current++;
      setStaffDetail(staff);
    }
  }
,

你不需要计数变量来更新你的数组数据。 尝试使用useEffect,我的代码here

      let staffData = props.staffData;
      const [staffList,setStaffList] = useState();
      useEffect(() => {
        const list = [];
        for (const [staffId,staff] of Object.entries(staffData)) {
          list.push(
            <tr key={staffId}>
              <td>{staff.name}</td>
            </tr>
          );
        }
        setStaffList(list);
      },[]);

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。