Вы устанавливаете начальный профиль для пустого объекта, но присваиваете значение по умолчанию для входа profile.displayName
, равное undefined
, и в ответ выдается следующее предупреждение.
Предупреждение. Компонент изменяет неконтролируемый ввод текста типа для управления. Элементы ввода не должны переключаться с неконтролируемого на управляемый (или наоборот). Выберите между использованием контролируемого или неконтролируемого входного элемента в течение срока службы компонента. *
Ваш начальный объект должен быть похож на
const [profile, setProfile] = useState({
displayName: ""
});
Затем обновите значение как
<input
value={profile.displayName}
name="displayName"
type="text"
onChange={e => {
setProfile({ ...profile, displayName: e.target.value });
}}
/>
// Get a hook function
const {useState, useEffect} = React;
function App() {
const [profile, setProfile] = useState({
displayName: "",
gender: "",
occupation: ""
});
useEffect(() => {
setProfile({
displayName: "StackOverflow",
gender: "Male",
occupation: "Software Eng."
});
}, []);
return (
<div>
<input
value={profile.displayName}
name="displayName"
type="text"
onChange={e => {
setProfile({ ...profile, [e.target.name]: e.target.value });
}}
/>
<input
value={profile.gender}
name="gender"
type="text"
onChange={e => {
setProfile({ ...profile, [e.target.name]: e.target.value });
}}
/>
<input
value={profile.occupation}
name="occupation"
type="text"
onChange={e => {
setProfile({ ...profile, [e.target.name]: e.target.value });
}}
/>
<p>display name: {profile.displayName}</p>
<p>gender: {profile.gender}</p>
<p>occupation: {profile.occupation}</p>
</div>
);
}
// Render it
ReactDOM.render(
<App />,
document.getElementById("react")
);
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/16.8.4/umd/react.production.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react-dom/16.8.4/umd/react-dom.production.min.js"></script>
<div id="react"></div>