当 CSS 调整到 React 中的 URL 时,奇怪的事件处理错误

如何解决当 CSS 调整到 React 中的 URL 时,奇怪的事件处理错误

编辑:这个问题是由于我的自定义 CSS 调整运行了两次。解决方案迫在眉睫。

我正在尝试在 React 网站中创建组件级事件处理程序(图片库/滑块中的箭头导航)。

以下是包含在 useEffect 钩子中的我的实现。我是 React 的新手。老实说,我才刚刚开始了解钩子。

我还有一个函数,就是读出url得到最后一个数字,比如/0或者/5,自动调整容器左边的CSS值,这样就聚焦到了正确的图片(里面的数字对应的那个) URL 字符串)。这是有效的。 React 的 useParams 没有。

奇怪的是,我的箭头导航仅在 URL 以 /0 结尾时才能完美运行(调整图像包装器,使第一个左:0%)。

当我用“http://....images/1”加载页面时,左箭头必须按两三次,右箭头使内容滑动 2 个图像。此外,条件失败,因此在这种情况下,所有其他键也会产生向右箭头向左滑动。

这是我在 React 中遇到的众多疯狂错误之一。有时有效有时失败的事情根本无法提高效率。

React.useEffect(function setupListener() {
        function handleKeyPress(evt) {

            const wrappers = document.getElementsByClassName('bilderwrapper')
            if(document.querySelector('.bilderwrapper') !== null) {
                //evt = evt || window.event
                //alert(evt.keyCode)

                if (evt.keyCode === 37) {

                    if (wrappers[0].style.left !== '0%') slide('left')
                }
                else if (evt.keyCode === 39) {

                    if (wrappers[wrappers.length-1].style.left !== '0%') slide('right')
                }
                // re-focus on Now centered art
                currentArt()
                // check buttons
                checkForUnnecessaryArrows()
            }
    
        }
        window.addEventListener('keydown',handleKeyPress)

        return function cleanupListener() {
          window.removeEventListener('keydown',handleKeyPress)
        }
    })

这是移动东西的代码位:

const getCSSLeftAsBareNumber = (obj) => {
        // get css value str:
        const origLeft = obj.style.left
        // cut off '%':
        const bareNum = origLeft.substring(0,origLeft.length-1) 
        return(parseInt(bareNum))
        // return bareNum
    }

    const slide = dir => {
        const wrappers = document.getElementsByClassName('bilderwrapper')
        if (dir === "left") {
            wrappers.forEach((wrap) => {
                const number = getCSSLeftAsBareNumber(wrap)
                console.log(number)
                wrap.style.left = (number+100)+'%'
            })
        }
        else if (dir === "right"){
            wrappers.forEach((wrap) => {
                const number = getCSSLeftAsBareNumber(wrap)
                console.log(number)
                wrap.style.left = (number-100)+'%'
            })
        }
    }

我已经将整个 URL-ending-css-adjust 函数包装在 useEffect() 中,并且有一个小改进:现在向左箭头滑动开始时在滑动方向上有轻微的抖动。现在必须按左箭头 2 次,从不按 3 次。只有当我之前按下左箭头时,右箭头才响应 1 次。

我无法创建可重现的最小示例。整个项目位于 https://github.com/NeilSentence/galerie-sens

感谢您的任何想法!

解决方法

包含基于 URL 的布局调整的 useEffect() 钩子运行了两次。它采用 CSS 值,重新计算它们,并更新起始值。因为做了两次,所以误差越大,slug数越高。

例如。 “/images/1”创建了一个左移 2,“images/3” 6。我不完全理解的疯狂部分是为什么箭头导航逻辑被这个搞砸了,甚至 alt键开始表现得像一个向右箭头。

解决方案是强制 useEffect() 钩子只运行一次

const [firstRender,setFirstRender] = useState(false)

React.useEffect(() => {

    if (!firstRender) {
        //all code here
        setFirstRender(true)
    }

```

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?