【问题标题】:React. Mousewheel.deltaY reacts to if statement, but not to switch做出反应。 Mousewheel.deltaY 响应 if 语句,但不切换
【发布时间】:2017-03-06 17:35:20
【问题描述】:

React 组件监听滚轮滚动:

componentDidMount() {
    this.refs.holder.addEventListener('mousewheel', this.handleScroll);
  }

并对此做出反应:

  handleScroll(e) {
    switch (e) {
      case e.deltaY > 0:
        console.log('positive');
      default:
        console.log('negative');
    }

    if (e.deltaY > 0) {
      console.log('positive');
    } else {
      console.log('negative');
    }
  }

if/else 语句可以正常工作,但是 switch 不能正常工作,你能解释一下原因吗?

【问题讨论】:

    标签: javascript reactjs switch-statement


    【解决方案1】:

    这与 React 无关。 Switch 语句不是这样工作的。您正在将e.deltaY > 0 的结果与e 进行比较,这将永远不会匹配。 e.deltaY > 0 将始终为 truefalsee 是一个事件对象,永远不会是truefalse。你可以这样做...

    switch (e.deltaY > 0) {
      case true:
        console.log('positive');
        break;
      default:
        console.log('negative');
    }
    

    我建议使用简单的if 语句,因为您唯一的情况是truefalse

    【讨论】:

    • 谢谢你的解释,查理。
    【解决方案2】:

    来自文档Switch

    switch 语句首先计算其表达式。然后它查找 第一个case子句,其表达式的计算结果与输入表达式的结果相同(使用严格比较,===)并将控制权转移给它.

    typeof e === typeof (e.deltaY > 0 ) //sometime true and sometime false
    
    e ===  (e.deltaY > 0 ) //sometime true and sometime false
    

    每次=== 都会给出不同的结果,你不会得到预期的结果

    【讨论】:

      猜你喜欢
      • 2018-12-12
      • 1970-01-01
      • 1970-01-01
      • 2021-04-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-12-20
      • 1970-01-01
      相关资源
      最近更新 更多