在JSX中围绕React组件包装高阶组件(HOC)

时间:2016-04-30 23:45:15

标签: javascript reactjs javascript-events react-jsx

我正在使用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.');
    }
}

1 个答案:

答案 0 :(得分:2)

在这种情况下,我认为你混淆了Higher-Order Component(HOC)和容器组件。 HOC接受一个Component(在您的情况下为Menu),然后返回一个Component(由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);