Как я могу установить значение динамических полей в React?

#javascript #reactjs

#javascript #reactjs

Вопрос:

У меня есть динамические поля для CRUD, и мне нужны данные обновления оттуда, для этого я должен установить значения данных, которые поступают через API. Функция отправки работает, форма обновляется, проблема в том, чтобы задать значения для входных данных. Сначала я думал о функции jquery ($document.ready), после этого я использовал useEffect hook, но оба варианта не работают, какая-нибудь помощь?, ниже приведен мой код.

 export default function Pros(){

const [pros, setPro] = useState([
    {pro: ''}
])

const changePro = e => {

    let proArr = [];
    let prosObject = [...pros]
        prosObject.map(x => {
        proArr.push(Object.values(x));
    })

    setPro({
        pro: proArr
    })

}

const submitPro = e => {
    const {pro} = pros;
}

const handleChangePro = (index, event) => {
    const values = [...pros];
    values[index][event.target.name] = event.target.value;
    setPro(values);
}

const handleAddPro = () => {
    setPro([...pros, {pro: ''}])
}

const handleRemovePro = () => {
    const values = [...pros];
    let index = values.length-1;
    values.splice(index, 1);
    setPro(values);
}

useEffect(() => {
    return () => {
        $("#createPro").val('pro number 1'); <------ that was the way what im doing it, but doesn't work
    };
}, [])

return(
    <div className="form-group">

            {
                pros.map((pro,index) => (
                    <div key={index} className="mb-3 input-group"> 
                        <div className="input-group-append input-group-text">
                            <i class="fas fa-list"></i>
                        </div>
                        <input id="createPro" onChange={event => handleChangePro(index, event)} type="text" className="form-control" name="pro" placeholder="set pro"/>

                    </div>
                ))
            }

            <div className="invalid-feedback invalid-pros"></div>


        <div className="row">
            <div className="col-12 justify-content-center d-flex" >
                <IconButton className="mb-1 justify-content-center" onClick={() => handleRemovePro()}> 
                    <RemoveIcon/>
                </IconButton>
                <IconButton onClick={() => handleAddPro()}>
                    <AddIcon/>
                </IconButton>
            </div>
        </div>
    </div>
);
 

}

Ответ №1:

Просто вам нужно value свойство для вашего элемента ввода, которое получает значение из переменной в вашем компоненте, предполагая, что у вас есть переменная

 let inputVal = 'some value'
 

вы можете иметь:

 <input value={inputVal} />
 

обратите внимание, что использование этой переменной с помощью useState hook поможет вам обновить значение при динамическом обновлении
, например:

 const [inputVal, setInputVal] = useState('some value')