setState() 位于 componentDidUpdate() 内部

2023-12-12

我正在编写一个脚本,该脚本根据下拉菜单的高度和屏幕上输入的位置将下拉菜单移动到输入下方或上方。我还想根据其方向将修饰符设置为下拉菜单。 但使用setState里面的componentDidUpdate创建无限循环(这是显而易见的)

我找到了使用的解决方案getDOMNode并直接将 classname 设置为 dropdown,但我觉得使用 React 工具应该有更好的解决方案。有谁能够帮助我?

这是工作代码的一部分getDOMNode(我 有点忽略定位逻辑以简化代码)

let SearchDropdown = React.createClass({
    componentDidUpdate(params) {
        let el = this.getDOMNode();
        el.classList.remove('dropDown-top');
        if(needToMoveOnTop(el)) {
            el.top = newTopValue;
            el.right = newRightValue;
            el.classList.add('dropDown-top');
        }
    },
    render() {
        let dataFeed = this.props.dataFeed;
        return (
            <DropDown >
                {dataFeed.map((data, i) => {
                    return (<DropDownRow key={response.symbol} data={data}/>);
                })}
            </DropDown>
        );
    }
});

这是带有 setstate 的代码(它创建了一个无限循环)

let SearchDropdown = React.createClass({
    getInitialState() {
        return {
            top: false
        };
    },
    componentDidUpdate(params) {
        let el = this.getDOMNode();
        if (this.state.top) {
           this.setState({top: false});
        }
        if(needToMoveOnTop(el)) {
            el.top = newTopValue;
            el.right = newRightValue;
            if (!this.state.top) {
              this.setState({top: true});
           }
        }
    },
    render() {
        let dataFeed = this.props.dataFeed;
        let class = cx({'dropDown-top' : this.state.top});
        return (
            <DropDown className={class} >
                {dataFeed.map((data, i) => {
                    return (<DropDownRow key={response.symbol} data={data}/>);
                })}
            </DropDown>
        );
    }
});

您可以使用setStateinside componentDidUpdate。问题在于,由于没有中断条件,您正在以某种方式创建无限循环。

基于您需要浏览器在渲染组件后提供的值这一事实,我认为您使用的方法componentDidUpdate是正确的,只是需要更好地处理触发条件setState.

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

setState() 位于 componentDidUpdate() 内部 的相关文章

随机推荐

  • C : 创建一个仅使用“write”函数来显示数字的函数

    我怎样才能编写一个基本函数 只需包含在 write 函数中 include
  • 如何使用 swift 5 URLSession 中引入的新结果类型?

    Swift 5 引入了新的 Result 类型来处理异步函数的结果 我想知道如何在 URLSession 中使用这个新的结果类型 我有以下代码 func getCategorByAPI Base Url is from an static
  • 出现错误“不允许更改属性‘osDisk.name’。”使用 Azure Powershell 脚本

    我正在尝试将带有托管磁盘的现有 Azure VM 移至现有可用性集中 但是 当我应用命令时 New AzureRmVM ResourceGroupName rg Location OriginalVM Location VM NewVM D
  • 作业提交时的 Scala fat jar 依赖问题

    我使用 Scala 编写了简单的 kafka 流 它在本地运行良好 我已经采取了 fat jar 并在 scala 集群中提交 提交作业后 我收到 未找到类 错误 如果我提取 fat jar 它在 fat jar 内具有所有依赖项 为什么我
  • 在 Matlab 中每秒打印一次警告

    我试图每秒打印一条警告或仅打印一条消息 例如 已过 1 秒 有可能实现这一点吗 我用 tic toc 和循环尝试过 但还不够 此外 我从来没有得到过一秒钟的时间 是否有一个命令可以每 X 毫秒自动打印一次 有任何想法吗 提前致谢 Use a
  • 如何使用样式/模板格式化 wpf 中的小数位数?

    我正在编写一个 WPF 程序 并且试图找到一种通过样式或模板等可重复方法来格式化 TextBox 中的数据的方法 我有很多文本框 确切地说是 95 个 每个文本框都绑定到自己的数字数据 每个数据都可以定义自己的分辨率 例如 如果数据为 99
  • 将多个精灵作为一个旋转(围绕同一原点)

    我有形成 T 形状的精灵数组 我想围绕同一原点旋转它们 在我的例子中是 box2D 主体原点 如下所示 我的形状在矩阵中定义如下 int array 0 1 1 1 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 0 0 0 0
  • scjp 测试中的正则表达式测试[重复]

    这个问题在这里已经有答案了 我正在尝试解决有关正则表达式的 scjp 测试 这是一个代码 import java util regex public class TestRegex public static void main Strin
  • 如何隐藏从 Python 调度的 COM 对象

    我在 Python 中使用 COM 并且希望该对象在后台隐藏运行 使用 Excel 我会 Import win32com client Excel win32com client Dispatch Excel Application Exc
  • &货币更改为¤cy=GBP

    我有一个非常奇怪的问题 我生成的要在电子邮件中发送的查询字符串正在以某种方式更改 我编写的一个旧应用程序根据数据库中的各种参数创建一个 URL dim wpret as string a target blank href a instId
  • 根据javascript中的选择选项显示/隐藏div

    上网搜了一下 学会了如何做到这一点 实施了它 但这不起作用 我想在选择学生时显示 div 学生 在选择教师时显示 div 老师 这是 jsp 文件的一部分 HTML 代码 table tr td td tr table
  • strip_tags 足以从字符串中删除 HTML 吗?

    站点用户可以在站点上注册 并且在注册期间他可以提供名称 我希望这个名称是一个有效的名称 并且不含任何 HTML 和其他时髦字符 strip tags 足够吗 我发现没有单一的功能可以防止用户输入白痴 最好将几种混合在一起 val trim
  • 用 Python 读取 PowerPoint 表格?

    我正在使用 python pptx 模块自动更新 powerpoint 文件中的值 我可以使用以下代码提取文件中的所有文本 from pptx import Presentation prs Presentation path to pre
  • 如何很好地将qint64“转换”为QProgressBar的int

    我正在使用 QFtp 是的 我知道 并且一切正常 使用他们自己的示例中的代码作为指导 http doc qt io archives qt 4 7 network qftp ftpwindow cpp html 我遇到的唯一问题是发送 或接
  • 如何执行 SQL 表中列出的 SQL Server 代理作业

    我试图将所有 SQL Server 代理作业存储在表名称中 并希望根据它们的加载频率来执行它们 CREATE TABLE Maintainance SQLJobName varchar 100 SQL Job Name which need
  • 从 Firebase 函数将数据返回到 Android [重复]

    这个问题在这里已经有答案了 我正在尝试做的事情 只需从 Firebase Cloud Function 返回数据即可 该函数用于在支付网关的服务器中创建支付订单 我所需的有关订单详细信息的数据位于function err data 见下文
  • 像松弛评论框反应原生的动画

    我正在开发一个评论框 在向上滑动操作时将其扩展到设备的高度 并在向下滑动操作时返回到其原始高度 但我无法向其中添加动画 因为该功能无法按照我想要的方式工作 作为参考 我们可以讨论松弛评论框动画 我的代码如下 code 小吃链接 https
  • split(" +") 和 split(" ") 不同

    我想消除字符串中的真空 String input java example java aaa bbb String temp input trim split 结果是 java 示例 javaaaabbb 但我想要的结果是 java示例 j
  • Javascript非对称加密和认证

    这里的一些人正在开发一个应用程序 其中包含一些可通过登录访问的 安全区域 在过去 登录表单和后续的 安全 页面都是通过 http 传输的纯文本 因为它是一个用于访问的应用程序 在几乎不可能使用 SSL 的共享服务器上使用 例如 WordPr
  • setState() 位于 componentDidUpdate() 内部

    我正在编写一个脚本 该脚本根据下拉菜单的高度和屏幕上输入的位置将下拉菜单移动到输入下方或上方 我还想根据其方向将修饰符设置为下拉菜单 但使用setState里面的componentDidUpdate创建无限循环 这是显而易见的 我找到了使用