仅当 Promise 在 onChange 事件中解析时触发 onChange 事件

Fire onChange event only if Promise resolves in the onChange event

提问人:Srilatha Danalakota 提问时间:9/29/2023 更新时间:9/29/2023 访问量:28

问:

   const validate(id){
retun new Promise((resolve,reject)=>{
axioscall()
.then((res)=> resolve(res))
.catch((err)=>reject(err))
}}

我有上面的承诺。并且仅当我的承诺解决或抛出被我的承诺拒绝的错误时,我才尝试调用 onChange 事件

   <checkbox onChange={(e)=>
validate(id)
.then((result) => result && handleChecked(e,id))
.catch((err)=>showError(err))/>

错误已成功抛出,但当 promise 解析时,handleChecked 事件不成功。我的意思是复选框没有被选中。

错误已成功抛出,但当 promise 解析时,handleChecked 事件不成功。我的意思是复选框没有被选中。问题是什么..如果我像下面这样写,事件被触发并选中复选框,但如何处理失败场景以显示错误。如何修改上述代码以处理成功和失败场景?

   <checkbox onChange={(e)=>
validate(id) && handleChecked(e,id))
/>
ReactJS 事件 承诺 onchange

评论

0赞 jfriend00 9/29/2023
您的函数是反模式。它可以只是.这就是您所需要的。这将直接返回 promise。无需将其包装在 .validate()return axioscall(...)new Promise(...)
0赞 Mulan 9/30/2023
您必须阅读什么是显式 Promise 构造函数反模式以及如何避免它?

答:

1赞 Arash jahan bakhshan 9/29/2023 #1

您可以使用状态控制输入。

const MyComponent = () => {
    const [value, setValue] = useState(false)

    const handleChange = async () => {
        const isValid = await validate(id)

        if(isValid) {
            setValue(prev => !prev)
        }
    }

    <input type="checkbox" onChange={handleChange} checked={value} />
}

要发出HTTP请求,最好使用第三方库,例如OR,它为您提供了帮助程序来跟踪请求,向用户显示加载程序,处理错误等等。react-queryswr