React+Formik의 validation에서 "in promise"오류가 발생했을 때의 대응
의 오류.
오류는 진정한 의미의 오류가 아니라'정상'검증이 유효할 때 표시됩니다.
낡은 샘플을 옮기면 나오지 않는데, 버전의 문제입니까?원인 불명.
잘못된 코드 보이기 (지금까지)
render={}를 제외하고는 본가의 견본과 변화가 없습니다.
render=()도 사용할 수 있습니다.
import React from 'react';
import './App.css';
import { Formik } from 'formik';
import * as Yup from 'yup';
class App extends React.Component {
render() {
return (
<div style={{padding:30}}>
<Formik
initialValues={{ name: '' }}
onSubmit={(values) => alert(JSON.stringify(values))}
validationSchema={Yup.object().shape({
name: Yup.string().required(),
})}
>
{
({ handleSubmit, handleChange, handleBlur, values, errors, touched, setErrors }) => (
<form onSubmit={handleSubmit}>
<input
type="text"
name="name"
id="name"
value={values.name}
onChange={handleChange}
onBlur={handleBlur}
/>
<div style={{color:'red'}}>
{errors.name}
</div>
<div>
<button type="submit">submit</button>
</div>
</form>
)
}
</Formik>
</div>
);
}
}
export default App;
이 코드를 실행하고 Validation을 사용하는 경우이런 느낌...
내버려 둘 수는 있지만 기분이 안 좋아서 대응을 고민했다.
개선 (방안)
오류 메시지 자체는 "Promise reject가 catch되지 않았습니다!"그래서 캐치만 하면 돼요.
하지만 어디서catch가 좋을까...반복 실험, 어쨌든 다음과 같다.
요점은
handleSubmit을 덮어쓸 수 있을 것 같지만 일시적으로 대응합니다.
import React from 'react';
import './App.css';
import { Formik } from 'formik';
import * as Yup from 'yup';
class App extends React.Component {
render() {
return (
<div style={{ padding: 30 }}>
<Formik
initialValues={{ name: '' }}
onSubmit={(values) => alert(JSON.stringify(values))}
validationSchema={Yup.object().shape({
name: Yup.string().required(),
})}
>
{
({ handleSubmit, handleChange, handleBlur, values, errors, touched, submitForm, setErrors }) => (
+ <form>
<input
type="text"
name="name"
id="name"
value={values.name}
onChange={handleChange}
onBlur={handleBlur}
/>
<div style={{ color: 'red' }}>
{errors.name}
</div>
+ <div>
+ <button type="submit" onClick={(e) => {
+ e.preventDefault();
+ submitForm().catch(error => setErrors(error));
+ }}>submit</button>
+ </div>
</form>
)
}
</Formik>
</div>
);
}
}
export default App;
하면, 만약, 만약...당분간 아무것도 안 나와.
기타
이전에 자신이 쓴 코드에는 나타나지 않았다.당시 Formik의 버전은 2.0.6, 지금은 2.0.7이어서 버전을 낮춰 보았지만 안 되었다.브라우저의 버전 차이?그렇게 생각하지만 다른 것 같아요.뭐죠?
Reference
이 문제에 관하여(React+Formik의 validation에서 "in promise"오류가 발생했을 때의 대응), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/zaburo/items/4ce83eb69b4e1cc93db3텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)