I am trying to display a flatList of numbers like this : (image of what the flat list would look like) To do that I did an array of objects with a numberName and a key, it’s generating with a loop:
JavaScript
x
12
12
1
const number = 5;
2
3
let [numbers, setNumbers] = useState([]);
4
5
let nums = [];
6
for (let i = 0; i < number; i++) {
7
nums.push({ numberName: i, key: i });
8
9
console.log(nums)
10
}
11
setNumbers((numbers) => [numbers, nums]);
12
I dont think the problem is in the loop, but react is recalling the loop without showing the component. This makes an infinite loop and I have the too Many rerender error.
Here is what console.log(nums) shows (screenshot of the console)
and here is how i am trying to render the array :
JavaScript
1
14
14
1
if(!fontsLoaded) {return <AppLoading />}
2
else {return (
3
<View>
4
<FlatList
5
showsHorizontalScrollIndicator={false}
6
horizontal={true}
7
data={numbers} //la data qu'on va afficher
8
renderItem={({ item }) => (
9
<Text style={styles.number}>{item.numberName}</Text>
10
)} //la fonction qu'il va rendre
11
/>
12
</View>
13
)}
14
Why do I have the too many rerenders error and how do I fix it ?
Advertisement
Answer
JavaScript
1
6
1
let [numbers, setNumbers] = useState([]);
2
useEffect(()=>{
3
const nums = numbers.map((value,index)=> {numberName: index,key: index})
4
setNumbers([numbers, nums])
5
},[])
6
You need to do assignment/state-related stuff inside useEffect hook.