代码之家  ›  专栏  ›  技术社区  ›  learningtech

命中状态的ReactJS合成事件?

  •  1
  • learningtech  · 技术社区  · 8 年前

    onHit(functionCall)
    {
        let attr = {};
        attr["onKeyPress"] = functionCall;
        attr["onClick"] = functionCall;
        attr["onTouchEnd"] = functionCall;
        return attr;
    }
    

    <a {...this.onHit((e)=>this.doSomething())} title="This has no href" tabIndex="0">This has no href</a>
    

    一切都按预期工作,按键、点击和触地都会触发同一事件。

    我创造了这个 onHit 功能是因为我正在构建一个web应用程序,其中所有的操作控件都需要通过键盘、鼠标和触摸屏来访问。

    在我继续使用我的自定义 函数,在ReactJS中是否有更惯用的方法来执行此操作?

    1 回复  |  直到 8 年前
        1
  •  1
  •   Tholle    8 年前

    我认为您的解决方案很好,但是您也可以创建一个以组件/元素类型为prop的自定义组件 onHit

    例子

    function MyComponent({ element: Element, onHit, ...rest }) {
      return (
        <Element onKeyPress={onHit} onClick={onHit} onTouchEnd={onHit} {...rest} />
      );
    }
    
    class App extends React.Component {
      render() {
        return (
          <MyComponent
            element={"a"}
            onHit={() => console.log("hit!")}
            title="This has no href"
            tabIndex="0"
          >
            This has no href
          </MyComponent>
        );
      }
    }
    
    ReactDOM.render(<App />, document.getElementById("root"));
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
    <div id="root"></div>