Функция обратного вызова при изменении состояния

#javascript #reactjs

Вопрос:

Я пытаюсь придать кнопке свойство по щелчку изменить sendSubTotals состояние на true.Если это состояние верно , я хочу, чтобы дочерние элементы возвращали функцию обратного getSubTotal вызова, чтобы вычесть промежуточный итог из каждого дочернего элемента, а затем установить total . У меня возникла проблема при возврате обратного вызова у ребенка. С помощью консоли.в журнале я могу видеть , вводится ли оператор (который основан на состоянии родителя), но функция обратного вызова от return ()=>getSubTotal(subTotal) по-прежнему сохраняет общее значение 0.Как я мог бы решить эту проблему? Большое спасибо!

Это состояние, для которого установлено значение True — необходимо отправить промежуточный итог дочернего элемента родителю(передается в событии onClick).:

 const [sendSubTotals,setSendSubTotals]=React.useState(false)
const handleTotalClick=(event)=>{
        setSendSubTotals(true)
        event.preventDefault()
    }
 

Это функция, которая вычисляет общую сумму в родительском:

 const getSubTotal=(subTotal)=>{
    const result=total subTotal
     setTotal(result)
     console.log("TOTAL WAS COMPUTED")      
    }
 

Вот как я передаю реквизит детям:

 <ControlledOpenSelect ourObject={ourObject} key={item.id} onRemove={()=>handleRemove(item.id)} getSubTotal={getSubTotal} substractSubTotal={substractSubTotal} sendSubTotals={sendSubTotals} />
 

И вот как я вызываю getSubTotal функцию в ребенке:

 if (sendSubTotals===true){
        console.log("SUBTOTAL OF THIS COMPONENT WAS SENT TO PARENT")
        console.log(subTotal)  
        return ()=>getSubTotal(subTotal)
    }if (sendSubTotals===false){
        console.log("NOT SENT TO PARENT")
    }
 

Комментарии:

1. можете ли вы поделиться своим кодом в любой песочнице кода??

2. getSubTotal={(subTotal) => getSubTotal(subTotal)} вы должны передать аргумент

3. Вот кодовая песочница: codesandbox.io/live/cmmecq0 .

4. @Rajdeep Debnath Это не работает… Этот файл console.log console.log("TOTAL WAS COMPUTED") никогда не вызывается

5. @Rajdeep Debnath Спасибо тебе !