![](/img/trans.png)
[英]react usestate Error: Too many re-renders. React limits the number of renders to prevent an infinite loop
[英]Why does useState react hook cause Too many re-renders. React limits the number of renders to prevent an infinite loop
我有以下腳本
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
更新客戶。 將其與users
一起放在useEffect
中作為“僅在此更改時調用”選項可以為您做到這一點。 看起來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]);
現在這只會在安裝時運行,並且當users
state 更改時。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.