javascript - 在 JSX 中的 React 组件周围包装高阶组件 (HOC)

标签 javascript reactjs dom-events

我正在使用JSX style编写 React,我正在尝试访问此 onClickOutside 的功能包装器来找出用户何时点击离开。这是其自述文件中的用法:

// How to install: npm install react-onclickoutside --save
// load the High Order Component:
var onClickOutside = require('react-onclickoutside');

// create a new component, wrapped by this onclickoutside HOC:
var MyComponent = onClickOutside(React.createClass({
  ...,
  handleClickOutside: function(evt) {
    // ...handling code goes here...
  },
  ...
}));

在本例中(在 JSX 中),我尝试访问“单击外部”功能,但它不起作用。

import React from 'react';
import OnClickOutside from 'react-onclickoutside';

export default class Menu extends React.Component {

    constructor(props){
        super(props);
    }


    render() {

        return (
            <OnClickOutside>
                <ul>
                    <li>Test 1</li> 
                    <li>Test 2</li> 
                    <li>Test 3</li> 
                </ul>
            </OnClickOutside>
        );
    }


    handleClickOutside(event) {
        console.log('Clicked outside.');
    }
}

最佳答案

我认为你混淆了 Higher-Order Component (HOC)和本例中的容器组件。 HOC 接受一个组件(在您的例子中为 Menu),然后返回一个组件(由 HOC 功能组成)。当容器组件渲染其子组件时。

如示例所示,onOutsideClick 组件是一个 HOC。这应该适用于您的示例:

import React from 'react';
import OnClickOutside from 'react-onclickoutside';

export class Menu extends React.Component {

    constructor(props){
        super(props);
    }


    render() {

        return (      
                <ul>
                    <li>Test 1</li> 
                    <li>Test 2</li> 
                    <li>Test 3</li> 
                </ul>
        );
    }


    handleClickOutside(event) {
        console.log('Clicked outside.');
    }
}

export default OnOutsideClick(Menu);

关于javascript - 在 JSX 中的 React 组件周围包装高阶组件 (HOC),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36961465/

相关文章:

javascript - 如何创建单个输入处理程序

javascript - 如何更改 Material-UI Card header front?

JavaScript onmouseover 未按预期工作

javascript - 是否有一种规范的方式来为缓慢加载的网页呈现 "loading"弹出窗口?

javascript - 我如何以类、命名空间的形式组织 javascript 代码(相同的 C#)

javascript - 使用 JavaScript 时的动态 SVG 线性渐变

reactjs - 在没有 CDN 的微前端包之间共享 react

javascript - 使用 Backbone 重定向时 URL 损坏

javascript - 如何从文本框中获取文本并在 WordPress 页面中使用 JavaScript 对其进行处理?

javascript - 单击其中的 anchor 链接时,如何使导航栏停止消失?它为什么要这么做?