CodeSandBox: 
https://codesandbox.io/s/onblur-bubble-preventiton-ngsdj?file=/src/App.js核心思路是利用 event.relatedTarget 这个属性来判断失焦是来自内部还是外部。代码如下:
import React, { useRef } from "react";
import "./styles.css";
export default function App() {
  const outerRef = useRef();
  return (
    <div className="App">
      <div
        onBlur={(e) => {
          // 失焦后获取焦点的那个元素
          const nextFocusDom = e.relatedTarget;
          // 判断其是否在父元素内,如果在父元素内就不错处理
          if (nextFocusDom && outerRef.current.contains(nextFocusDom)) {
            console.log(" [内部导致] 父元素失焦");
          } else {
            console.log(" [需要处理]  [外部导致] 父元素失焦");
          }
        }}
        className="outer"
        ref={outerRef}
        tabIndex="0"
      >
        <input className="inner" />
        <select className="inner" />
      </div>
      <input />
    </div>
  );
}