javascript - 在 React 中有条件地声明一个状态
问题描述
如果提供了某个道具,我可以设置一个状态吗?像这样的东西:
function Comp({scroll, children}) {
const [scrollY, setScrollY] = useState(0);
useEffect(() => {
if (scroll) {
window.addEventListener('scroll', () => {
setScrollY(window.pageYOffset);
});
}
}, [])
// Some other codes...
return (
// Some jsx
);
}
如果没有提供道具,我不需要scrollY
状态和副作用。scroll
JavaScript 不允许在 if 条件中声明,React 不允许在 if 条件中使用 useState。
function Comp({ scroll, children }) {
if (scroll) {
const [scrollY, setScrollY] = useState(0);
useEffect(() => {
window.addEventListener('scroll', () => {
setScrollY(window.pageYOffset);
});
}, [])
}
// Some other codes...
return (
// Some jsx
);
}
我正在寻找这样的东西,但显然它不会工作。
解决方案
根据 React的 hooks 规则,不要在循环、条件或嵌套函数中使用 hooks,hook 只能在顶层使用。因此,对于您的问题,没有使用条件声明状态useState
如果您想根据特定的道具实现逻辑,那么您应该根据检查道具来实现它,就像useEffect
您所做的那样:
useEffect(() => {
if (scroll) {
window.addEventListener('scroll', () => {
setScrollY(window.pageYOffset);
});
}
}, [])
或者条件渲染 JSX:
{ scroll && renderStuffsIfScrollExist() }
推荐阅读
- java - Hamcrest:如何在 Collections 中使用一个/或可组合的匹配器
- c++ - 在 NTL 中构造多项式的标准方法是什么?
- php - metaphone() 中的音素参数有什么作用?
- java - java中tomcat下如何用jsp获取不同的会话?
- jsf-2 - ui:repeat 不起作用,DOM 中也没有
- python-3.x - python3 雅虎收益日历
- python - 从 localhost 访问 AWS 中的 docker 容器
- .net - 在 Heroku 上托管 .NET Core 控制台应用程序
- node.js - 使用 cookie-parser 销毁 http-only cookie
- python - 差动驱动机器人中的 PID 调节。使用 beagle-bone black、python、Encoder DC 电机和 H 桥驱动器