【实战】 六、用户体验优化 - 加载中和错误状态处理(中) —— React17(2)

  ...
  <ShadowCard>
    <Title>{isRegister ? "请注册" : "请登录"}</Title>
    { error ? <Typography.Text type="danger">{error.message}</Typography.Text> : null }
    {isRegister ? <Register onError={setError}/> : <Login onError={setError}/>}
    <Divider />
    ...
  </ShadowCard>
</Container>

);
};


修改 `src\unauthenticated-app\login.tsx`(传入 `onError` 并在异步操作后 `catch` 中使用):




export const Login = ({onError}: { onError: (error: Error) => void }) => {

const handleSubmit = (values: { username: string; password: string }) => {
login(values).catch(e => onError(e))
};

};


同理修改 `src\unauthenticated-app\register.tsx`:




export const Register = ({onError}: { onError: (error: Error) => void }) => {

const handleSubmit = (values: { username: string; password: string }) => {
register(values).catch(e => onError(e))
};

};


使用非预设用户名密码检验:没反应。。。但是控制台打印出了刚输入的用户名和密码。。。


通过登录的调用链可以找到 导致这个问题的原因:`src\auth-provider.ts`


* `!res.ok` 时,返回了 `Promise.reject(data)` ,而 `data` 是请求入参,这显然不是预想的效果(注册同理),修改这部分为 `Promise.reject(await res.json())`


修改后再次检验,成了!


`Promise.catch` 固然好用,但接下来换个思路,使用 `try..catch` 并引出 `Event Loop`。


先修改 `src\unauthenticated-app\login.tsx` 试试水:




export const Login = ({onError}: { onError: (error: Error) => void }) => {

const handleSubmit = (values: { username: string; password: string }) => {
try { <

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值