微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

不断观察条件是否为真,而无需在ReactJs中进行渲染

如何解决不断观察条件是否为真,而无需在ReactJs中进行渲染

在我的react项目中,我有一个要求,我必须连续检查条件并在条件变为真时立即调用函数

条件如下:

var El = document.activeElement;
if(document.getElementById('myInputField').getAttribute('aria-invalid') === 'true'
   && !(document.getElementById('myInputField') === El) {

       // function call

}

这在ReactJs中如何实现?

我也可以使用jquery / javascript。

其他详细信息: 我正在使用外部项目中的输入字段。输入字段检查提供的输入并更改其自己的aria-invalid属性。 如果用户使用无效的输入提交表单,我想检查aria-invalid是否为真,并且焦点不在输入字段上。

解决方法

以下示例显示了正确和不正确的方式来操作DOM(在React的上下文中):

// -> Imports
import React,{ useEffect,useState } from "react";

// -> Element Ids
const subHeading = "sub-heading";

// -> DOM Manipulator
// -> Don't do this,opt for conditional style instead
// -> Check h1 element for example
function sideEffect() {
  document.getElementById(subHeading).style.color = "red";
}

// -> Time Constant
const fiveSeconds = 5000;

export default function App() {
  // -> State
  const [readCond,writeCond] = useState(false);
  // -> Side Effects
  // -> Change readCond to true after five second pause
  useEffect(() => {
    setTimeout(() => writeCond(true),fiveSeconds);
  },[]);
  // -> Trigger DOM manipulation when readCond is true
  useEffect(() => {
    if (readCond) sideEffect();
  },[readCond]);
  return (
    <div>
      <h1 style={{ color: readCond ? "red" : "black" }}>React Way - Good</h1>
      <h2 id={subHeading}>DOM Way - Bad</h2>
    </div>
  );
}

Working sandbox

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