【问题标题】:How to define a ternary operation in reactjs correctly?reactjs中如何正确定义三元运算?
【发布时间】:2020-01-14 01:14:00
【问题描述】:

我正在尝试制作一个功能

如果 X 为真 然后调用 setFalse 函数 ELSE 不要调用 setFalseFunction

    this.state = {
      X: true,
      Y: true,
      Z: true,
    };
  }

  setFalse() {

    this.setState({

      X: true ? this.setState.setFalse() : !this.setState.setFalse()),
      Y: true ? this.setState.setFalse() : !this.setState.setFalse()),
      Z: true ? this.setState.setFalse() : !this.setState.setFalse())

    });
  }

但这似乎不起作用,我也尝试过 X = true?而不是 X: true?,仍然没有运气。

【问题讨论】:

  • 为什么需要三元运算符? if (true) this.setState.setFalse();.
  • !this.setState.setFalse() 不是“不要调用setFalse”,而是“调用setFalse 然后否定结果”。此外,您永远不会引用X 的当前值,如果您的新状态依赖于旧状态,您应该使用setState 的回调形式。我强烈建议您阅读结构化教程(参见例如reactjs.org/docs/state-and-lifecycle.html)。
  • 这不是你使用setState的方式。但一般你可以使用&& - condition && doStuff() 只有在条件为真时才会调用doStuff
  • 我正在检查 3 种不同的条件,虽然使用 and if 会使它更长。
  • 如果您能向我们展示真实代码会很有帮助

标签: javascript reactjs ternary-operator


【解决方案1】:

首先,setState() 不是要使用的,如果您想要一种可以使false 成为您所有状态的方法,您需要执行以下操作:

this.state = {
  X: true,
  Y: true,
  Z: true,
};

// Change all the states to "false", without checking then
setFalse = () {
  this.setState({ X: false, Y: false, Z: false });
};

如果您想要检查每个状态的当前值,然后在此基础上分配一个新值,您可以这样做:

setFalse = () => {
  const { X, Y, Z } = this.state;

  // If the states are "true", change them to "false"
  this.setState({ X: X ? !X : X, Y: Y ? !Y : Y, Z: Z ? !Z : Z });
};

【讨论】:

    【解决方案2】:

    如果你想这样做 -> “如果 X 为真,则调用 setFalse 函数,否则不要调用 setFalseFunction”

    那么你不需要setState 做任何事情,因为你没有改变你的变量(X,Y,Z)的状态!您只想验证它们是否为真,如果是,您想调用函数setFalse,对吗?

    你可以通过简单地做到这一点,例如:

    class App extends React.Component {
      state = {
        X: true,
        Y: true,
        Z: true,
      }
    
      setFalse() {
        console.log('I was called')
      }
    
      render() {
        const {X} = this.state
    
        return <div>{ X ? this.setFalse() : null }</div>
      }
    }
    

    现在,如果您想调用 setFalse 并更改变量的状态,那么您需要进入您的函数并执行以下操作:

      setFalse() {
        console.log('I was called')
    
        this.setState({
          X: false,
        })
      }
    

    打开您的开发工具并查看状态变化,有一个工作示例here

    我建议您了解一下 React 中的 生命周期study it

    【讨论】:

    猜你喜欢
    • 2014-06-18
    • 2013-08-19
    • 2020-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-07
    • 1970-01-01
    相关资源
    最近更新 更多