在清除输入标签时,我得到一个组件正在更改要控制的文本类型的不受控制输入
On clearing input label I'm getting a component is changing an uncontrolled input of type text to be controlled
我设计了以下组件:
import React, { useState } from "react";
function Search(props) {
const [studentData, setStudentData] = useState({
studentName: "",
joiningDate: "",
});
const onAdd = () => {
const emptyObject = {
name: "",
joiningDate: "",
};
setStudentData(emptyObject);
}
}
};
return (
<div className="my-50 layout-row align-items-end justify-content-end">
<label htmlFor="studentName">
Student Name:
<div>
<input
id="studentName"
name="studentName"
data-testid="studentName"
type="text"
value={studentData.name}
onChange={onRecordUpdate}
className="mr-30 mt-10"
/>
</div>
</label>
</div>
);
}
export default Search;
问题是,当我在“搜索”函数中使用以下代码在“居民列表”中输入输入字段后尝试清除输入字段时
const emptyObject = {
name: "",
joiningDate: "",
};
setStudentData(emptyObject);
我收到以下错误。我不确定为什么 React 假设输入标签不受控制,因为我正在使用状态对其进行初始化。
Warning: A component is changing an uncontrolled input of type text to be controlled. Input elements should not switch from uncontrolled to controlled (or vice versa). Decide between using a controlled or uncontrolled input element for the lifetime of the component.
in input (at Search.js:88)
in div (at Search.js:87)
in label (at Search.js:85)
in div (at Search.js:84)
in Search (at App.js:35)
in div (at App.js:34)
in div (at App.js:32)
in App (at src/index.js:8)
任何人都可以提供任何见解吗?
似乎您在初始状态下使用 studentName
作为输入的值,而在 emptyObject
内部只是 name
。所以 studentName
将是 undefined
并且 React 假定不受控制的组件。
我认为将 name
重命名为 studentName
可以解决您的问题。
我设计了以下组件:
import React, { useState } from "react";
function Search(props) {
const [studentData, setStudentData] = useState({
studentName: "",
joiningDate: "",
});
const onAdd = () => {
const emptyObject = {
name: "",
joiningDate: "",
};
setStudentData(emptyObject);
}
}
};
return (
<div className="my-50 layout-row align-items-end justify-content-end">
<label htmlFor="studentName">
Student Name:
<div>
<input
id="studentName"
name="studentName"
data-testid="studentName"
type="text"
value={studentData.name}
onChange={onRecordUpdate}
className="mr-30 mt-10"
/>
</div>
</label>
</div>
);
}
export default Search;
const emptyObject = {
name: "",
joiningDate: "",
};
setStudentData(emptyObject);
我收到以下错误。我不确定为什么 React 假设输入标签不受控制,因为我正在使用状态对其进行初始化。
Warning: A component is changing an uncontrolled input of type text to be controlled. Input elements should not switch from uncontrolled to controlled (or vice versa). Decide between using a controlled or uncontrolled input element for the lifetime of the component.
in input (at Search.js:88)
in div (at Search.js:87)
in label (at Search.js:85)
in div (at Search.js:84)
in Search (at App.js:35)
in div (at App.js:34)
in div (at App.js:32)
in App (at src/index.js:8)
任何人都可以提供任何见解吗?
似乎您在初始状态下使用 studentName
作为输入的值,而在 emptyObject
内部只是 name
。所以 studentName
将是 undefined
并且 React 假定不受控制的组件。
我认为将 name
重命名为 studentName
可以解决您的问题。