Добавлю к выше написанному комментарию от Вадима.
Иногда существует надобность в том, что бы проводить какие-либо манипуляции с данными сразу после того, как мы их изменили в функции. Возьмём пример автора:
import React, { useState } from "react";
import "./styles.css";
const View = ({ inputValues, onChangeInput }) => {
return <input type="text" value={inputValues} onChange={onChangeInput} />;
};
const Logic = () => {
const [inputValues, setInputValues] = useState("");
const onChangeInput = e => {
setInputValues(e.target.value);
// *** Здесь мы хотим взять новые данные и что-то с ними сделать (в данный
// момент мы просто выводим в консоль)
console.log(inputValues);
};
return <View inputValues={inputValues} onChangeInput={onChangeInput} />;
};
export default Logic;
*** Здесь данные устаревшие, это описал Вадим, и я с ним согласен. Но всё-таки, есть вариант использовать данные сразу после их изменения, и к сожалению в хуках этот вариант выглядит куда менее эстетичнее, нежели в классах.
Дело в том, что в классах для изменения состояния используется setState (кэп). setState первым параметром принимает изменяемый объект, а вторым (необязательным) параметром он принимает callback, в котором можно получить уже изменившийся state. Ниже приведён пример автора, где функциональная компонента Logic переделана в одноименную классовую компоненту.
Тут. При вводе символов в input, в консоли мы будем получать символы по порядку, т.е. будем видеть актуальный state
Чтобы добиться такого же результата у автора, нужно подписаться на изменение параметра inputValues в хуке useEffect.
Тут. Теперь мы так же при вводе символов в input видим актуальные данные.