javascript - 为什么 useState React hook 会导致 Too much re-renders。 React限制渲染次数以防止无限循环

标签 javascript reactjs react-hooks

我有以下脚本:

const [customers, setCustomer] = useState([]);

  if(users.results){
    users.results.filter(user => {
      user.roles.filter(role => {
        if(role.role.name === 'ADMIN'){
          admins.push(user);
        }
      });
    });
    let x = []
    users.results.filter(user => {
      user.roles.filter(role => {
        if (role.role.name === 'CUSTOMER') {
          x.push(user);
        }
      });
    });
    setCustomer(x);
  }

尝试调用setCustomer会导致重新渲染次数过多。 React 限制渲染数量以防止无限循环错误。我似乎找不到原因。 如何将客户设置为 x 的值而不导致上述错误?

更新代码

const Administration = props =>{
  const { fetchUsers, users, loading_users } = props;
  const usersPerPage = 9

  useEffect(() => {
    fetchUsers();
  }, []);
    
  let admins = [];
  const [customers, setCustomer] = useState([]);

  if(users.results){
    users.results.filter(user => {
      user.roles.filter(role => {
        if(role.role.name === 'ADMIN'){
          admins.push(user);
        }
      });
    });
    let x = []
    users.results.filter(user => {
      user.roles.filter(role => {
        if (role.role.name === 'CUSTOMER') {
          x.push(user);
        }
      });
    });
    setCustomer(x);
  }

最佳答案

听起来您只想在 users 更新时使用 setCustomer 更新客户。将其放置在带有 usersuseEffect 中作为“仅在更改时调用此选项”选项可以为您做到这一点。看起来 admins 应该是 state:

const [admins, setAdmins] = useState([]);

useEffect(() => {
  if(users.results){
    let admins = [];
    users.results.filter(user => {
      user.roles.filter(role => {
        if(role.role.name === 'ADMIN'){
          admins.push(user);
        }
      });
    });
    setAdmins(admins);

    let x = []
    users.results.filter(user => {
      user.roles.filter(role => {
        if (role.role.name === 'CUSTOMER') {
          x.push(user);
        }
      });
    });
    setCustomer(x);
  }
}, [users]);

现在,这只会在安装时以及用户状态更改时运行。

关于javascript - 为什么 useState React hook 会导致 Too much re-renders。 React限制渲染次数以防止无限循环,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61378494/

相关文章:

javascript - 每次输入时的输入字段都失去焦点

javascript - 函数从未由 getElementById().addEventListener() 触发

javascript - 运行客户端代码时显示正在加载的 gif 图像

javascript - 如何在基于类的组件中创建引用并将其传递给 react 中的功能组件?

javascript - 如何按 es6/React 中的特定字段对 map 进行排序?

reactjs - 为什么我的 React JS 代码在满足这两个条件的情况下会进入无限循环?

javascript - 使用 javascript 更改 url,无需刷新页面

javascript - 强制 Angular 子组件完全渲染

javascript - 子组件未更新父属性的更新状态

javascript - 如果我在一个表单中有很多文本输入( Hook ),我该如何提高 react 性能?