Javascript 我用let声明了变量,但它仍然不在全局范围内

Javascript 我用let声明了变量,但它仍然不在全局范围内,javascript,reactjs,Javascript,Reactjs,我试图使一个组件出现在“不可照明=(年龄)”的条件下{ var dateOfBirth=“2007-01-01”; var split_dob=出生日期分割(“-”); var月=分割月[1]; var日=分割日[2]; var年=分割日[0]; var dob_asdate=新日期(年、月、日); var today=新日期(); var mili_dif=Math.abs(today.getTime()-dob_asdate.getTime()); 风险期限=百万美元/(1000*3600*

我试图使一个组件出现在“不可照明=(年龄)”的条件下{ var dateOfBirth=“2007-01-01”; var split_dob=出生日期分割(“-”); var月=分割月[1]; var日=分割日[2]; var年=分割日[0]; var dob_asdate=新日期(年、月、日); var today=新日期(); var mili_dif=Math.abs(today.getTime()-dob_asdate.getTime()); 风险期限=百万美元/(1000*3600*24*365.25); 控制台日志(年龄); 不灵活=年龄<18岁; }; 现在它在组件周围的语法中没有定义,并且组件没有出现

<div>
      {uneligible && (
        <Alert variant="filled" severity="error">
          This is an error alert — check it out!
        </Alert>
      )}
    </div>

{uneligible&&(


由于这个问题,我没有使用stateful变量:

let
允许您声明限制在使用它的块语句或表达式范围内的变量,这与
var
关键字不同,后者全局声明变量,或局部声明整个函数,而不考虑块范围

就像
const
一样,
let
在全局声明时(在最顶部的范围内)不会创建窗口对象的属性


要实现您想要的功能,您可以使用
var
/
窗口。不可用的
而不是

查看react文档,以了解其生态系统是如何围绕状态运行的。您的代码应该类似于此,并带有给定的详细信息-

当出现某个事件时,您可以调用相同的函数,比如按钮单击时的
单击事件,而不是useffect

关于您更新的问题-您一次又一次地设置状态,因为由于设置状态而导致的每个渲染都将再次调用状态更新程序函数,并且将继续…如果您想要一个一次性的初始渲染,而您根本没有处理程序,这不是您想要的


但是现在,由于您将通过函数处理程序处理警报的可见性,因此您有责任向该组件添加某种状态,以便在该处理程序中更新可见性状态并显示警报。

根据您提供的codesandbox,
handleSaveGeneral
从未使用过,因此
uneligible
永远不会被设置。首先,你永远不会调用你的函数,因此值总是未定义的。其次,React不是这样工作的。如果你想更新DOM,你必须提交对有状态变量的更改,可以是一个reducer,或者更常见的是一个
useState
hook。组件主体中声明的任何值都会丢失(或重置)一旦组件重新渲染,因为它们属于上一个渲染。为什么您将
handleSaveGeneral
声明为
async
?您可能应该看看更多的react教程,因为您的代码充满语法错误。在您的情况下,uneligible是一个简单的变量,而不是有状态的。这意味着您的组件赢了如果你更改了它,请大家看更新的问题我在沙箱中将它更改为var,但仍然不起作用我添加了一个按钮来使用它,这也是非常有用的,谢谢
<div>
      {uneligible && (
        <Alert variant="filled" severity="error">
          This is an error alert — check it out!
        </Alert>
      )}
    </div>