0

import { useState, useEffect } from 'react' import './App.css';

function App() {

const [count, setCount] = useState(0)

useEffect(() => {

console.log('render') 

}, [count])

First: show me on UI but send me error on conosle: Too many re-renders. React limits the number of renders to prevent an infinite loop.

const plusCount = () => {

setCount(count + 1) } 

const minsCount = () => {

setCount(count - 1) } 

Second : do not sho em on UI send me error on UI: Too many re-renders. React limits the number of renders to prevent an infinite loop.

const makeCount = {

add:setCount(count + 1), discount: setCount(count - 1) 

}

return (

 <h1>Exercise</h1> <p>Cunt: <b>{count}</b></p> <button onClick={plusCount}>Add</button> <button onClick={minsCount}>Discount</button> </div> 

) }

export default App;

Guestion: Why is this message show me error on both time, but on first let me show on UI on the second do not show me on UI

2 Answers 2

1

You are executing the setCount function on render, which causes a rerender which results in an infinity loop:

const makeCount = { add: setCount(count + 1), discount:setCount(count - 1) } 

This object actually call the setCount function instead of creating an fucntion to be called.

You need to change it to:

const makeCount = { add: () => setCount(count + 1), discount: () => setCount(count - 1) } 

This will generate new functions called add and discount instead of calling setCount.

Sign up to request clarification or add additional context in comments.

Comments

0

App.js

import React ,{useState} from 'react'; import { Child } from './Components/Child'; function App() { let value = [1,2,4,6]; const number = (number,val)=>{ console.log(`${number}: value ${val}`) } return ( <div className="App"> { value.map((item , i)=>{ return <Child count = {item} itemName={i} key={i} muFunc={number}/> }) } </div> ); } 

export default App;

Child.js

import React,{useState,useEffect} from 'react'; export function Child ({count,itemName,muFunc}) { const [number, setnumber] = useState(count); useEffect(() => { muFunc(itemName,number); }, [number]); const makeCount = { add: () => setnumber(number + 1), discount: () => setnumber(number - 1) } // Send this number to parent ?? return( <> <h3>{itemName}</h3> <button onClick ={makeCount.discount}>decrement</button> <input value={number} onChange={(e)=>setnumber(e.target.value)} /> <button onClick ={makeCount.add}>Increment</button> <br/> </> ) } 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.