正文从这开始~
总览
当我们在多选框上设置了checked
属性,却没有onChange
处理函数时,会产生"You provided a checked
prop to a form field without an onChange
handler"错误。为了解决该错误,可以使用defaultChecked
属性,或者在表单字段上设置onChange
属性。
文章图片
这里有个例子用来展示错误是如何发生的。
// App.jsexport default function App() {
// ?? Warning: You provided a `checked` prop to a form field
// without an `onChange` handler. This will render a read-only field.
// If the field should be mutable use `defaultChecked`.
// Otherwise, set either `onChange` or `readOnly`.
return ();
}
上述代码片段的问题在于,我们在
input
表单上设置了checked
属性,但却没有提供onChange
事件处理器。这使得input
的checked
属性成为静态的。defaultChecked 解决该错误的一种方式是,使用
defaultChecked
属性取而代之。export default function App() {
return ();
}
defaultChecked
属性为多选框设置了一个初始值,但是该值不是静态的,是可以被更改的。defaultChecked
属性常被用于不受控(不被开发者控制)的多选框。这意味你必须使用ref
或者表单元素来访问表单字段的值。
// App.jsimport {useRef} from 'react';
// ? Example of uncontrolled checkbox
export default function App() {
const ref = useRef(null);
const handleClick = () => {
console.log(ref.current.checked);
};
return ();
}
每当你点击按钮时,多选框的
checked
值就会被打印到控制台上。onChange 或者,我们可以在
input
表单字段上设置onChange
属性,并处理事件。import {useState} from 'react';
export default function App() {
const [isSubscribed, setIsSubscribed] = useState(false);
const handleChange = event => {
setIsSubscribed(event.target.checked);
// ? this is the checkbox itself
console.log(event.target);
// ? this is the checked value of the field
console.log(event.target.checked);
};
return ();
}
我们做的第一件事是将
input
的checked
值存储在一个叫做isSubscribed
的状态变量中。我们在多选框上设置了【React报错之You provided a `checked` prop to a form field】我们可以通过onChange
属性,所以每当值改变时,handleChange
函数就会被调用。
event
对象上的target
属性来访问多选框。类似地,我们可以通过event.target.checked
来访问多选框的值。初始值 如果你想为多选框提供一个初始值,只需将它传递给
useState()
钩子。import {useState} from 'react';
export default function App() {
// ? set checked to true initially
const [isSubscribed, setIsSubscribed] = useState(true);
const handleChange = event => {
setIsSubscribed(event.target.checked);
// ? this is the checkbox itself
console.log(event.target);
// ? this is the checked value of the field
console.log(event.target.checked);
};
return ();
}
我们向
useState
钩子传递了true
,所以复选框的初始值将是checked
。推荐阅读
- Ant|Ant Design Pro从零到一(认识AntD)
- React报错之React hook 'useState' cannot be called
- React报错之React Hook 'useEffect' is called in function
- React报错之React hook 'useState' is called conditionally
- react.js|react学习----jsx语法
- react.js|react学习----组件
- React报错之Expected an assignment or function
- React报错之Unexpected default export of anonymous function
- 前端|前端食堂技术周刊第 44 期(Bun、Vue.js 挑战、React 状态管理的新浪潮、Can I DevTools、函数式编程)