修复 React 中的 value prop on input should not be null 错误
当我们将输入的初始值设置为 null 或覆盖将其设置为 null 的初始值时,会导致警告“value prop on input should not be null”,例如 来自空的 API 响应。 使用后备值来解决这个问题。
下面是一个如何导致警告的示例。
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 (
<div>
<input value={null} />
</div>
);
}
上面代码示例中的问题是 – 我们将 input 字段的 value 属性设置为 null,这是不允许的。
我们可能还从远程 API 获取 input 字段的值并将其设置为 null。
为了解决这个问题,我们必须确保永远不要通过提供后备值将 input 上的 value 属性设置为 null。
import {useState} from 'react';
const App = () => {
// ?️ 将空字符串作为初始值传递
const [message, setMessage] = useState('');
const handleChange = event => {
setMessage(event.target.value);
};
// ✅ 使用 fallback, 例如
// value={message || ''}
return (
<div>
<input
type="text"
id="message"
name="message"
onChange={handleChange}
value={message || ''}
/>
</div>
);
};
export default App;
我们将状态变量的值初始化为空字符串而不是 null。
除非在代码中的其他位置将状态变量设置为 null,否则这将消除警告。
我们使用了逻辑 OR (||)
运算符,如果左边的值是假的(例如 null),则返回右边的值。
这有助于我们确保输入字段的 value 属性永远不会设置为 null。
如果使用带有 refs 的不受控制的输入字段,则根本不要在输入上设置 value
属性,而是使用 defaultValue
。
import {useRef} from 'react';
const App = () => {
const inputRef = useRef(null);
function handleClick() {
console.log(inputRef.current.value);
}
return (
<div>
<input
ref={inputRef}
type="text"
id="message"
name="message"
defaultValue="Initial value"
/>
<button onClick={handleClick}>Log message</button>
</div>
);
};
export default App;
上面的示例使用不受控制的输入。 请注意,input 字段没有设置 onChange
属性或值。
我们可以使用 defaultValue 属性将初始值传递给不受控制的输入。 但是,这不是必需的,如果你不想设置初始值,可以省略该道具。
当使用不受控制的 input 字段时,我们使用 ref 访问输入。
每次用户单击示例中的按钮时,都会记录不受控制的输入的值。
我们不应该在不受控制的输入(没有 onChange
处理程序的输入字段)上设置 value
属性,因为这会使 input 字段不可变并且我们将无法输入它。
声明:本站所有文章,如无特殊说明或标注,均为本站原创发布,任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站。本站所有源码与软件均为原作者提供,仅供学习和研究使用。如您对本站的相关版权有任何异议,或者认为侵犯了您的合法权益,请及时通知我们处理。