反应。 Mousewheel.deltaY对if语句作出反应,但不对其进行切换

时间:2017-03-06 17:35:20

标签: javascript reactjs switch-statement

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,能解释一下原因吗?

2 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

来自文档Switch

  

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

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

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

每次===都会给出不同的结果,而您将无法获得预期的结果