【问题标题】:Why is not the ternary operator working on state properties为什么三元运算符不在状态属性上工作
【发布时间】:2019-10-04 05:37:50
【问题描述】:

我已经从状态中破坏了“password”和“retypepassword”属性,现在尝试对它们应用条件。当我使用 if 和 else 语句时,它工作得很好,但是当我使用三元运算符时,它就不起作用了。我检查了三元运算符的格式,和我写的一样,但还是不行。

请让我知道我做错了什么!

SubmitHandler = e => {
    e.preventDefault();
    const { password, retypepassword } = this.state;
    // if (password === retypepassword) {
    //   console.log("password not match");
    // } else console.log(this.state);
    password === retypepassword
      ? return(console.log("form submitted"))
      : "password does not match";
  };

【问题讨论】:

  • 您可能正在寻找useStatereactjs.org/docs/hooks-reference.html#usestate
  • 能否请您也用适合您的 IF 示例填写代码?
  • 我开始写一个答案,但是你这里的用法没有意义。使用三元组运行console.log 是对三元组的滥用。答案是您需要将return 移到条件(return password === retypepassword)之前,但无论如何您都不应该在这里使用三元组。只需使用 if 声明即可。
  • 这里的return语句只在匹配的情况下执行,它返回的是console.log的结果,即undefined。在不匹配的情况下,您不会返回任何内容。所以这个处理程序总是返回undefined。也许你的意思是return password === retyepassword ? 'form submitted' : 'password does not match'?不清楚你想在这里做什么。

标签: javascript reactjs state ternary-operator


【解决方案1】:

要匹配 if/else 你会做的行为:

console.log(password === retypepassword ? "form submitted" : this.state);

【讨论】:

    【解决方案2】:

    问题是您的 if/else 块中的代码与三元语句中的代码不同。

    看看在你的 if/else 中,你没有返回任何东西,而且你在这两种情况下都在 console.log() 中?

    只要让你的三元运算符也这样做:

    SubmitHandler = e => {
        e.preventDefault();
        const { password, retypepassword } = this.state;
    
        password === retypepassword 
        ? 
        console.log("form submitted")
        : 
        console.log("password does not match")
      };
    

    但是为了可读性,我不认为三元组是这样使用的,即使它在技术上是可行的。

    【讨论】:

      猜你喜欢
      • 2015-10-07
      • 1970-01-01
      • 1970-01-01
      • 2013-04-11
      • 2013-07-12
      • 1970-01-01
      • 1970-01-01
      • 2016-05-03
      相关资源
      最近更新 更多