Remix 양식에 애니메이션 상태 추가
5024 단어 react
양식을 로드하는 데 시간이 꽤 걸린다고 가정해 보겠습니다. 일부 사용자는 참을성이 없어 제출 버튼을 여러 번 클릭하거나 입력을 변경할 수도 있습니다.
액션에 "수면"을 도입하여 이를 모방해 봅시다.
export const action = async ({ request }) => {
// Sleep...
await new Promise((r) => setTimeout(r, 1000));
// All the other stuff
};
이제 코드는 항상 1000밀리초 동안 대기합니다.
Remix useTransition 후크 사용
우리가 이미 사용한 후크 외에도 Remix는
useTransition
후크를 제공합니다.이 후크를 사용하여 양식이 무언가로 바쁘다는 사실에 연결할 수 있습니다.
우리의 경우 모든 양식 필드를 비활성화하고 버튼의 텍스트를 변경하여 사용자가 어떤 일이 일어나고 있음을 알 수 있도록 합니다.
먼저 렌더 내부에 후크를 로드합니다.
import { useTransition } from '@remix-run/react';
export default function NewPost() {
const transition = useTransition();
// Our render
}
그런 다음 렌더링 부분에 대해 양식 요소를 fieldset 내부에 래핑할 수 있으므로 모든 요소를 빠르게 비활성화할 수 있습니다.
<Form method='post'>
<fieldset disabled={transition.state === 'submitting'}>
// Our form fields
</fieldset>
</Form>
우리가 전환 상태에 연결되는 것을 볼 수 있으며 제출 중이면 양식을 비활성화합니다.
다음으로 버튼을 변경하여 작업도 반영할 수 있습니다.
<button
type='submit'
className='rounded bg-blue-500 py-2 px-4 text-white hover:bg blue-600 focus:bg-blue-400 disabled:bg-blue-300'
>
{transition.state === 'submitting' ? 'Creating...' : 'Create post'}
</button>
이는 상태를 사용하여 표시할 텍스트를 결정하는 것과 동일한 개념입니다.
코드를 실행하면 다음과 같은 결과를 얻어야 합니다.
여기에서 완성된 코드 샘플을 찾을 수도 있습니다GitHub branch.
읽어주셔서 감사합니다. 연결해 봅시다!
제 블로그를 읽어주셔서 감사합니다. 내 이메일 뉴스레터를 구독하고 Facebook에 연결하거나
Reference
이 문제에 관하여(Remix 양식에 애니메이션 상태 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://dev.to/dailydevtips1/adding-an-animated-state-to-our-remix-form-3fmj텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)