2019-08-30
描述
一个 hook,可以处理包装在组建内部的点击事件。
- 创建一个自定义的 hook,使用 
ref和callback来处理click事件 - 使用 
React.useEffect()hook 来添加或清除click事件 - 使用 
React.useRef()hook 为你的点击组建创建一个ref,并将他作为参数传递给useClickInsidehook 
实现
const useClickInside = (ref, callback) => {
  const handleClick = e => {
    if (ref.current && ref.current.contains(e.target)) {
      callback();
    }
  };
  React.useEffect(() => {
    document.addEventListener('click', handleClick);
    return () => {
      document.removeEventListener('click', handleClick);
    };
  });
};
使用
const ClickBox = ({ onClickInside }) => {
  const clickRef = React.useRef();
  useClickInside(clickRef, onClickInside);
  return (
    <div
      className="click-box"
      ref={clickRef}
      style={{
        border: '2px dashed orangered',
        height: 200,
        width: 400,
        display: 'flex',
        justifyContent: 'center',
        alignItems: 'center'
      }}
    >
      <p>Click inside this element</p>
    </div>
  );
};
ReactDOM.render(
  <ClickBox onClickInside={() => alert('click inside')} />,
  document.getElementById('root')
);
        
                
                ME!
            
                
                链滴