hox icon indicating copy to clipboard operation
hox copied to clipboard

与umi 的 useRequest 一起使用时,捕获不到全局错误

Open lichia9527 opened this issue 4 years ago • 4 comments

当和umi的useRequest一起使用时,我在组件最外层配置了UseAPIProvider的onError属性,当接口500时,不执行onError的回调函数

// useUser.js
const useUser = () => {
  const [userInfo, setUser] = useState();
  const { run, loading } = useRequest('/api/user', {
    manual: true
  });

  useEffect(() => {
    run().then(user => setUser(user));
  }, []);

  return { userInfo, loading, run };
};

export default createModel(useUser);
// App.js
import { UseAPIProvider } from '@umijs/use-request';
const App = () => {
return (
     <UseAPIProvider
        value={{
          onError: (e) => console.log(e)
        }}
    >
      <Children />
    </UseAPIProvider>
)
}
// Children.js

const Chidren = () => {
     const user = useUser()
     return <h1>Chidren</h1>
}

我直接使用useRequest是可以的捕获到500错误的

lichia9527 avatar Jun 04 '20 13:06 lichia9527

这个的确是预期行为,因为 hox 的状态是存在一个独立的组件树之中的,所以你在 App 组件中创建 UseAPIProvider 是不能捕获到报错的。 这个问题也许在 hox v2 中能得到解决,目前的临时方案是只能自己去处理报错

cc @brickspert

awmleer avatar Jun 05 '20 03:06 awmleer

这个的确是预期行为,因为 hox 的状态是存在一个独立的组件树之中的,所以你在 App 组件中创建 UseAPIProvider 是不能捕获到报错的。 这个问题也许在 hox v2 中能得到解决,目前的临时方案是只能自己去处理报错

cc @brickspert

v2 这部分有什么解决思路吗?

h-a-n-a avatar Jun 06 '20 15:06 h-a-n-a

暂时可以这样:https://zhuanlan.zhihu.com/p/205453249

aweiu avatar Aug 30 '20 03:08 aweiu

https://codesandbox.io/s/stupefied-euler-jgq93?file=/src/CountBtn.js recoil 也能逻辑复用... 多一个atom

X-neuron avatar Sep 10 '20 11:09 X-neuron