React报错之`value` prop on `input` should not be null

【React报错之`value` prop on `input` should not be null】正文从这开始~
总览 当我们把一个input的初始值设置为null或者覆盖初始值设置为null时,会产生"valueprop on input should not be null"警告。比如说,初始值来自于空的API响应。可以使用一个回退值来解决这个问题。
React报错之`value` prop on `input` should not be null
文章图片

这里有个例子来展示错误是如何发生的。

export default function App() { // ?? Warning: `value` prop on `input` should not be null. // Consider using an empty string to clear the component or `undefined` for uncontrolled components.return (); }

上述代码的问题在于,我们为input表单的value属性设置为null,这是不被允许的。
你也可能从远程API获取你的input表单的值,并将其设置为null
回退值 为了解决该问题,我们可以通过提供回退值,来确保永远不会为input表单的value属性设置null
import {useState} from 'react'; const App = () => { // ? pass empty string as initial value const [message, setMessage] = useState(''); const handleChange = event => { setMessage(event.target.value); }; // ? use fallback, e.g. //value=https://www.it610.com/article/{message ||''}return (); }; export default App;

我们把state变量的值初始化为一个空字符串,而不是null
这样就可以摆脱警告,除非在你代码的其他地方将state变量设置为null
我们使用逻辑与(||)操作符,如果操作符左侧的为假值(比如说null),则返回其右侧的值。这可以帮助我们确保input表单的value属性永远不会被设置为null
defaultValue 如果你借助refs使用不受控制的input表单,请不要在input元素上设置value属性,使用defaultValue来代替value属性。
import {useRef} from 'react'; const App = () => { const inputRef = useRef(null); function handleClick() { console.log(inputRef.current.value); }return (); }; export default App;

上述示例使用了不受控制的input。注意input表单上并没有设置onChange或者value属性。
你可以使用defaultValue属性来为不受控制的input传递初始值。然而,这一步骤不是必要的,如果你不想设置初始值,你可以省略该属性。
当使用不受控制的input表单时,我们使用ref来访问input元素。每当用户点击例子中的按钮时,不受控制的input 的值都会被记录下来。
你不应该为不受控制的input设置value属性,因为这将使input表单不可变,你将无法在其中输入。

    推荐阅读