【发布时间】:2019-08-07 05:23:45
【问题描述】:
更新问题:
如果我在滚动之前在输入字段中输入内容,expanded 属性会设置为 true - 正确
如果我向下滚动 - 扩展设置为 false - 正确
如果我现在在输入字段中输入内容,expanded 仍然是 false - 我希望 expanded 再次设置为 true。
代码:
export default () => {
const [expanded, setExpanded] = useState(true)
let searchInput = React.createRef()
let scrollTopValue = 0;
function handleSearchInput() {
console.log(Boolean(searchInput.current.value.length))
setExpanded(Boolean(searchInput.current.value.length)) // first time true, don't get re triggered
}
useEffect(() => {
window.addEventListener('scroll', handleScroll)
return () => window.removeEventListener('scroll', handleScroll)
}, []);
function handleScroll() {
setExpanded(scrollTopValue > document.documentElement.scrollTop)
scrollTopValue = document.documentElement.scrollTop
}
return (
<header>
{expanded? 'expanded': 'nope'}
<input role="search" ref={searchInput} onChange={handleSearchInput}></input>
</header>)
}
【问题讨论】:
-
我没有看到更新。你的意思是
{expanded? 'expanded': 'nope'}没有按预期工作吗?您发布的代码中没有问题。 -
更新问题,希望我能更好地解释自己
-
如果您有未解决的问题,我会取消重复问题并尝试回答。但就我所见,没有问题。更改和滚动处理程序都按预期更新状态 stackblitz.com/edit/react-ccv6dh 。这无法复制,如果我在输入字段中键入内容,现在展开仍然是错误的。
-
感谢您的代码,我一定有其他一些我不知道的错误。感谢您抽出宝贵时间,我会看看我的管道有什么不同
-
不客气。如果您想出一个可以复制问题的示例,请随时联系我。
标签: javascript reactjs react-hooks