【发布时间】:2021-07-05 09:39:54
【问题描述】:
当我使用 inputs ref={inputRef} 并使用 setState 时,state 的值总是落后一步 - 意思是,它拥有之前的 value。
当我在输入字段中键入任何字符串时,在第一个按钮中它将有一个空字符串,只有在第二个按钮单击时它才会有我输入的字符串并会触发 console.log('searchString', searchString); TWICE!
我在上一个问题中得到建议,而不是每次我在输入字段中按下一个字母时都调用onChange={(e) => onChangHandler(e)},我可以在单击activeSearch() 的按钮时获取整个值ONE只有时间。
function Header({ setingResults }) {
const [productsObj, setObjs] = useState([]);
const [searchString, setString] = useState('');
const inputRef = useRef();
// const onChangHandler = (e) => {
// setString(e.target.value);
// };
const activeSearch = () => {
setString(inputRef.current.value);
if (searchString.length > 0) {
console.log('searchString', searchString);
setingResults(searchString);
}
};
return (
<div>
<header className='header-shop'>
Welcome to Vitamins Store
<br />
<input
placeholder='Search here'
ref={inputRef}
// value={searchString}
// onChange={(e) => onChangHandler(e)}
/>
<button onClick={activeSearch}>Search</button>
</header>
</div>
);
}
export default Header;
有人知道这里有什么问题吗?
我会很高兴得到一些帮助。
【问题讨论】:
-
如my answer 中所示,当使用不受控制的输入和回调属性时,您不再需要
setString(inputRef.current.value);。您可以使用局部变量const searchString = inputRef.current.value;
标签: javascript reactjs input react-hooks