如何在页面加载时在反应打字稿中设置可见性

Posted

技术标签:

【中文标题】如何在页面加载时在反应打字稿中设置可见性【英文标题】:How to set visibility in react typescript on page load 【发布时间】:2021-12-27 23:22:59 【问题描述】:

我在用户可以接受或拒绝的反应应用程序中创建 cookie 同意。如果用户已经接受 cookie 概念,则不再显示。

如果项目已经设置,我想检查页面加载,不显示同意,否则显示(html 到隐藏)。但问题是 onLoad 事件,文档还没有准备好。 我该如何解决这个问题?

另外,我发现页面加载时点击了“OnpageLoad()”

接受拒绝工作正常

cookieconsent.ts

const storageType = localStorage;
const consentPropertyName = "jdc_consent";

const saveToStorage = () => storageType.setItem(consentPropertyName, "true");

class UserConsent 
  OnpageLoad() 
    debugger;
    const shouldShowPopUp = storageType.getItem(consentPropertyName);

    if (shouldShowPopUp != "true") 
      let html = document.getElementById("consent-pop") as HTMLElement;
      html.classList.add("hidden");
    
  

  async acceptConsent() 
    debugger;
    saveToStorage();
    let html = document.getElementById("consent-pop") as HTMLElement;
    html.classList.add("hidden");
    //html.style.display === "block";
  

  async rejectConcent() 
    storageType.removeItem(consentPropertyName);
    let html = document.getElementById("consent-pop") as HTMLElement;
    html.classList.add("hidden");
  


export default new UserConsent();

view.tsx

  <div>
    <div>
     ...
    </div>

      <div
        id="consent-pop"
        onLoad=cookieconsent.OnpageLoad
        style=
          position: "fixed",
          bottom: 0,
          left: 0,
          right: "0",
        
        className="visible"
      >
        <p>
          By using this site you agree to our Terms and Conditions" "
          <a onClick=cookieconsent.acceptConsent>Accept</a> or" "
          <a onClick=cookieconsent.rejectConcent>Reject</a>
        </p>
      </div>
    </div>

【问题讨论】:

您可以尝试使用属性hidden 或简单样式display:none 是的,我已经尝试了所有这些,但问题是页面加载时 dom 还没有准备好。 document.getElementById("consent-pop") as HTMLElement; 正在返回 null 【参考方案1】:

试试这个:

const storageType = localStorage;
const consentPropertyName = "jdc_consent";
const saveToStorage = () => storageType.setItem(consentPropertyName, "true");

class UserConsent 

  componentDidMount() 
    window.addEventListener('load', this.handleLoad);
  

  handleLoad() 
    debugger;
    const shouldShowPopUp = storageType.getItem(consentPropertyName);

    if (shouldShowPopUp != "true") 
      let html = document.getElementById("consent-pop") as HTMLElement;
      html.classList.add("hidden");
    
  

  async acceptConsent() 
    debugger;
    saveToStorage();
    let html = document.getElementById("consent-pop") as HTMLElement;
    html.classList.add("hidden");
    //html.style.display === "block";
  

  async rejectConcent() 
    storageType.removeItem(consentPropertyName);
    let html = document.getElementById("consent-pop") as HTMLElement;
    html.classList.add("hidden");
  


export default new UserConsent();

也许也可以尝试使用useEffect

【讨论】:

以上是关于如何在页面加载时在反应打字稿中设置可见性的主要内容,如果未能解决你的问题,请参考以下文章

如何在打字稿中设置初始 React 状态?

使用打字稿路径映射时反应本机加载模块错误

如何在 Angular 10 中设置 Azure 媒体播放器打字稿定义

如何在 ipad 中使用 jquery 加载页面后在文本框中设置光标

如何使用 Svelte 在 Storybook 中设置打字稿?

如何在打字稿中设置复选框属性