如何将 useState 钩子的状态设置为 true

时间:2021-01-23 19:15:16

标签: javascript reactjs react-hooks

这里我使用 useState 将状态“不合格”设置为 false 作为开始

    const [state,setState] = React.useState({
   
    uneligible: false,
  
  })

然后我正在编写一个函数来将状态设置为 true,这就是我收到错误的地方:

 function setEligibility(){state.uneligible==='true'}

这就是错误: enter image description here

这里是将其设置为 true 的条件(如果用户年龄< 18 状态应为 true):

 var split_dob = dateOfBirth.split("-");
    var month = split_dob[1];
var day = split_dob[2];
var year = split_dob[0];
var dob_asdate = new Date(year, month, day);
var today = new Date();
var mili_dif = Math.abs(today.getTime() - dob_asdate.getTime());
var age = (mili_dif / (1000 * 3600 * 24 * 365.25));
console.log(age);
if(age<18){setEligibility();}

如果状态成功设置为 true(如果用户的年龄 <18),我将调用它来显示警报组件:

 <Grid item xs={8} style={{marginTop:"10px"}}>{state.uneligible&&<Alert variant="filled" severity="error">
  This is an error alert — check it out!
</Alert>}</Grid>
                   

我需要帮助修复错误并使警报组件出现

4 个答案:

答案 0 :(得分:0)

你不需要做一个函数来改变状态

const [eligible,setEligible] = React.useState(
false  // default value
)

更新状态

setEligible(true)

答案 1 :(得分:0)

我的印象是您阅读了两种不同的 React 方法并将它们混合在您的代码中:旧的基于类(没有钩子但具有显式状态)和基于钩子的。使用钩子,您实际上没有状态,正如 Fahad 指出的那样,您可以直接设置单个(状态)变量。如果你想保留你拥有的对象,你会这样做:

function setEligibility() { 
   setState({uneligible: true});
}

答案 2 :(得分:0)

state.uneligible==='true' 是一个条件,而不是赋值。

您应该更改以下行:

function setEligibility(){state.uneligible==='true'}

function setEligibility(){state.uneligible = 'true'}

答案 3 :(得分:0)

您将状态变量名称声明为状态,这不是一个好习惯,并且还可能引发关键字错误。相反,使用符合条件的变量名称。

像这样定义状态:

const [uneligible, setUneligible] = React.useState(false);

设置条件会变成这样:

var split_dob = dateOfBirth.split('-');
var dob_asdate = new Date(split_dob[0], split_dob[1], split_dob[2]);
var today = new Date();
var mili_dif = Math.abs(today.getTime() - dob_asdate.getTime());
var age = mili_dif / (1000 * 3600 * 24 * 365.25);
if (age < 18) {
  setUneligible(true);
}

如果 Uneligibile 设置为 false,则您渲染的是一个似乎不正常的空 Grid。而是:

if (uneligible) {
  return (
    <Grid item xs={8} style={{ marginTop: '10px' }}>
      <Alert variant="filled" severity="error">
        This is an error alert — check it out!
      </Alert>
    </Grid>
  );
} else {
  return null;
}