我现在开始学习react.js并开发一个个人项目.我遇到了一个问题,找不到问题.

    const [open, setOpen] = useState(false);

    const handleScroll = () => {
        const { scrollHeight, clientHeight } = document.documentElement;

        console.log(open);
    };

    useEffect(() => {
        window.addEventListener('scroll', handleScroll);

        return () => {
            window.removeEventListener('scroll', handleScroll)
        }
        // eslint-disable-next-line
    }, []);

我设置了窗口滚动事件处理程序,并在收件箱滚动功能中,我想显示打开状态的变化.但即使我已经改变了它,它总是显示我是错误的.请帮助我出了什么问题.

我试图将打开状态传递给Inbox Scroll,但它不起作用.

推荐答案

我看到了你的问题,我有一个主意.

当组件渲染时,它会创建handleScroll个函数. 之后,handleScroll功能就变成了关闭.所以即使你试图改变它102,这也是不可能的.handleScroll功能仍然指"false",因为'open'是关闭的一部分.

因此您应该使用"100"挂钩来更改值.

我下面写的代码可以在点击按钮时更改打开的值.

const [open, setOpen] = useState(false);

const handleScroll = useCallback(() => {
    const { scrollHeight, clientHeight } = document.documentElement;

    console.log(open);
}, [open]);

useEffect(() => {
    window.addEventListener('scroll', handleScroll);

    return () => {
        window.removeEventListener('scroll', handleScroll)
    }
    // eslint-disable-next-line
}, [handleScroll]);

return (
    <button onClick={() => setOpen(true)} >Click</button>
);

希望此代码对您有帮助!

Reactjs相关问答推荐

如何使用React Router创建响应式主详细信息应用程序?

过滤对象数组并通过迭代对象数组将属性放入新数组

如何避免react 使用ESLINTreact 挂钩/穷举-deps进行第一次呈现

如何在取数后添加新数据,并在页面上保存旧数据?

无法从正在使用Reaction的Electron 商务store 项目中的购物车中删除项目

Reaction中的数据加载不一致

使用REACT-RUTER-DOM链接仅更新一个搜索参数

在transformResponse中使用来自其他查询的缓存

带有样式的工具提示导致无法向功能组件提供参考警告

.populate() 方法在 mongodb 中不起作用

Redux 工具包不更新状态

下一个js如何从另一个组件更新组件?

Next.js i18n 路由不适用于动态路由

react 测试库不测试包含 react 路由 dom V6 的组件

ReactJs 行和列

错误:无效挂钩调用.钩子只能在函数组件的主体内部调用.使用 next/router 时

当状态改变时如何执行一些动作,但只针对第一次更新?

如何在 React 中的 Material Ui 多选中设置默认值?

我在使用 Elements of stripe 时使用 React router v6

你如何使用 refs 访问 React 中映射子项的值?