陷入了 React useEffect 的一系列变化

2024-06-18

我正在反应中创建一个表单生成器。在一个简单的文本字段上,我需要:

  1. Change currentValue
  2. When currentValue已更改,验证它
  3. 验证完成后,发出一个事件(有效或无效)

这是我的代码:

const TextInput = ({ props }) => {

    const [currentValue, setCurrentValue] = useState(props.initialValue);
    const [validationState, setValidationState] = useState(false);
    
    const validate = () => {
        if (!currentValue) {
             setValidationState(false);
        }
        else {
             setValidationState(true);
        }
    }

    useEffect(() => {
        validate();
    }, [currentValue]);

    useEffect(() => {
        emitter.emit('textInputChange', { currentValue, validationState});
    }, [validationState]);
}

但是,我现在遇到这个问题,如果我只依赖validationState发出变化,尽快TextInput变为有效,发射停止。我需要在每次更改时发出。

但如果我依赖currentValue也是,那么自从validationState不同步,我可以获得无效状态。换句话说,currentValue可能是有效的,但我发出invalid从之前未更新的validationState.

我应该如何解决这个问题?


我认为你不需要状态validationState,像这样更新一个useEffect:

const validate = (value) => {
  if (!value) {
    return false;
  }
  return true;
};

useEffect(() => {
  const isValid = validate(currentValue);
  emitter.emit("textInputChange", { currentValue, validationState: isValid });
  
}, [currentValue]);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

陷入了 React useEffect 的一系列变化 的相关文章

随机推荐

  • 忽略下划线模板中未定义的数据/变量

    仍在学习骨干 所以请耐心等待 我正在尝试向视图添加一个带有空白字段的新模型 但我创建的模板有一大堆
  • 仅当值发生更改时如何插入数据库?

    我需要更新 替换 MySQL 数据库中的字段 但前提是它们已更改 该表包含 ID 文本字段和更改日期 用户根据更改日期通过 ID 查询数据 即 如果该日期早于用户上次查询数据的时间 则他不想要它 仅当文本字段与具有相同 ID 的现有文本字段
  • 类型错误:.substring 不是函数

    我正在运行 Acrobat Pro DC 我有一个带有 Action OnBlur 事件的文本字段 CC CardNumber 该事件运行以下脚本来产生此错误 我已经研究了几个小时 但看不出我的代码哪里不正确 var fld this ge
  • 在 Node.js 中查找默认网关 IP 的最佳方法是什么?

    如今在 Node js 中查找默认网关 IP 地址的最佳方法是什么 os networkInterfaces 不提供此信息 想到的唯一想法是解析stdout子流程的route n Kernel IP routing table Destin
  • WKWebView不加载https URL?

    我有一个 WKWebView 应该加载以下网址 https buchung salonmeister de place offer details page id 907599 venueId 301655 她是我使用的代码 import
  • 当我将列表分配给变量时,为什么 Pycharm 会提示我“此列表创建可以重写为列表文字”?

    我是一个Python初学者 有一个难题 当我写这样的代码时 lst 1 2 3 4 Pycharm给我的提示是 这个列表创建可以重写为列表文字 但如果换成 lst list 1 2 3 4 Pycharm什么也没说 谁能告诉我为什么 这段代
  • 持有对派生类的引用的基类

    我想这样做 struct Derived struct Base Derived const m ref Base Derived const ref m ref ref struct Derived Base Derived Base t
  • Seaborn 调色板 - 防止颜色回收

    Seaborn 允许定义包含多种颜色的调色板 这对于具有多条线的图表很有用 然而 当将调色板设置为具有多种颜色的调色板时 仅使用前六种颜色 之后颜色会循环使用 从而难以区分线条 这可以通过显式调用调色板来覆盖 但这并不方便 当定义的颜色超过
  • Spring Cloud Config - 不允许使用 git-upload-pack

    我有一个在 docker 环境中运行的 spring boot 应用程序 它连接到 Git 存储库以获取应用程序的配置 我的问题是 当尝试获取 properties 文件时 应用程序有时会出错 这很奇怪 因为如果我更改用户和密码 同一个应用
  • 我应该在 .vimrc 文件中使用单引号还是双引号?

    单个 和双 在 Vim 中引用 它会造成速度差异吗 在其中运行函数时 使用其中一个更好还是另一个更好 这有什么关系吗 我对它们在以下方面的用途特别感兴趣 vimrc file 我这么问是因为我发现人们在同一件事上使用这两种方法 我想知道它们
  • 在 C# 中读取大型 SQL 脚本文件

    我正在尝试阅读一个大脚本 到目前为止我已经尝试了两种选择 选项1 由于内存空间不足的问题 我们无法在SQL Management Studio中打开大型脚本文件 所以最初我使用sqlcmd在远程主机上执行 160 mb SQL 脚本文件 5
  • Gatsby - 将 Google 字体添加到 Gatsby 网站

    我正在尝试在我的 Gatsby 网站中添加 Google 字体 Mukta Malar 我看过很多关于将 Google 字体添加到 Gatsby 网站的文章 其中大多数似乎都使用了这个插件 gatsby plugin prefetch go
  • 运算符“=”的左侧必须是引用。仅在 Angular 生产版本中的 Webkit/Safari 中

    我使用 Angular 开发了一个项目 当我将其用于生产时 我没有收到任何错误 并且在 Chrome 上一切正常 如果我在 Webkit Safari 上运行应用程序 控制台会打印以下错误 语法错误 运算符 的左侧必须是引用 funzion
  • GXT 3 中树的单击处理程序?

    我一直在翻阅GXT3 s Tree API http dev sencha com deploy gxt 3 0 0 rc2 javadoc gxt com sencha gxt widget core client tree Tree h
  • 如何在 AngularJS 中从 ng-include 切换控制器值?

    我正在使用 AngularJS 我有一个header html我已经使用 ng include 将该 html 页面合并到另一个 html 中 另外 我有一个下拉列表header html我希望显示所选值 从下拉列表中 列表 我怎样才能做到
  • Galera 集群问题

    我想在我们的生产环境中使用Galera集群 但我有一些顾虑 每个表必须至少定义一个显式主键 每个表必须运行在InnoDB或XtraDB存储引擎下 分批处理您的大额交易 例如 不要让一个事务插入 100 000 行 而是将其分成更小的块 例如
  • IllegalStateException:预期配置 ':module:debugFeatureCompileClasspath' 仅包含一个文件,但是,它包含 2 个文件

    我正在使用带有即时应用程序和穿戴应用程序的多功能Android应用程序 在这里我能够成功运行我的应用程序但在期间出现以下错误构建 APK 或重建项目 java lang IllegalStateException Expected conf
  • 如何达到AWS Lambda并发执行限制?

    UPDATE 下面的原始测试代码基本上是正确的 但在 NodeJS 中 各种 AWS 服务的设置应该根据以下内容略有不同 SDK link https docs aws amazon com sdk for javascript v2 de
  • dplyr 将字符串拆分为逗号分隔的列表

    我正在尝试使用 dplyr 将字符串拆分为逗号分隔的字符串 但运气不佳 dat lt data frame key 1 4 labels c a ab abc b 我试图将标签列设置为 c a a b a b c b 我已经尝试了以下所有变
  • 陷入了 React useEffect 的一系列变化

    我正在反应中创建一个表单生成器 在一个简单的文本字段上 我需要 Change currentValue When currentValue已更改 验证它 验证完成后 发出一个事件 有效或无效 这是我的代码 const TextInput p