Отправить значение базовому класу от дочерного и использовать в функции

Имеются две проблемы, в первой что значение select устанавливается предварительное т.е. меняю один input и сразу меняется select на другие данные но значение остается предыдущее.

Нужно чтобы значение которое изменяеться в доречном класе отправлялось в базовый и потом использовалось в функции formatAmountFromLimit которая вызываеться и принимает даное значение в теле лямбды

Базовый

Fields:

function LimitsFields (props) {
  const [unit, setUnit] = useState(props.limit.unit)


  return <Form onSubmit={onSubmit}>
   

      <Form.Group controlId='formGridLimitAmount' as={Col}>
        <Form.Label>Limit Amount</Form.Label>
        <Form.Control
            type='text'
            value={ limitAmount }
            onChange={e => {
              setLimitAmount(formatAmountFromLimit(e.currentTarget.value,unit))
            }}/>
      </Form.Group>
      <Form.Group controlId='formGridUnit' as={Col}>
        <Form.Label>Unit</Form.Label>
          <UnitsDropdown
              unit={unit}
              setUnit={setUnit}
              limitType={limitType}
              entityType={entity}
              siteGroup={siteGroup}
              riskType={riskType}
              isUpdate={isUpdate}/>
      </Form.Group>
    </Form.Row>
  </Form >
}

export default LimitsFields

Дочерний где изменяеться значение

import React, {useState, useEffect} from 'react'

const UnitsDropdown = ({
                           unit,
                           setUnit,
                           limitType,
                           entityType,
                           riskType,
                           isUpdate,
                       }) => {
    const [items, setItems] = useState([
        {label: unit || 'Loading...', value: unit || ''}
    ])

    useEffect(() => {
        if (limitType === '') {
            setItems([{label: 'All', value: ''}])
        }
        if (limitType && !isUpdate && entityType) {
            getUnits()
        }
        if (isUpdate) {
            getUnits()
        }
    }, [limitType, entityType])

    const getUnits = async () => {
        await fetch('api/units?limitType=' + limitType)
            .then(res => res.json())
            .then(body => {
                setItems(body.map((name) => ({label: name, value: name})))
            }).catch(e => {
                console.log('UnitsDropdown Error' + e)
            })
    }



    return (
        <select className="form-control" disabled={isUpdate && riskType !== 'LENDING'} value={unit}
                required={isUpdate && riskType !== 'LENDING'}

                onChange={e => {
                    setUnit(e.currentTarget.value)
                    handleUnitChange(e)
                }}>
            {items.map(({label, value}) => (
                <option key={value} value={value}>
                    {label}
                </option>
            ))}
        </select>
    )
}
export default UnitsDropdown

Функция formatAmountFromLimit в базовом(Fields) где нужно применить новое значение

<Form.Group controlId='formGridLimitAmount' as={Col}>
        <Form.Label>Limit Amount</Form.Label>
        <Form.Control
            type='text'
            value={ limitAmount }
            onChange={e => {
              setLimitAmount(formatAmountFromLimit(e.currentTarget.value,unit))
            }}/>
</Form.Group>

Ответы (1 шт):

Автор решения: p1e0

Как решение создал callback функцию

→ Ссылка