그럼에도 불구하고

👨‍💻

[Router] useNavigation과 useSubmit 본문

React/Router

[Router] useNavigation과 useSubmit

zenghyun 2023. 6. 12. 15:24

 

useNavigation과 useSubmit에 대해 알아보겠습니다.

 

 

[ useNavigation ]

useNavigation은 useNavigate와는 다릅니다.  헷갈리면 안 됩니다. :)

 

예를 들어, useNavigation은 어떤 폼을 작성해서 제출하는데 현재 진행 상황을 저장하는 것과 같을 경우 사용하기에 좋습니다. 

 

즉, 현재 폼에 대한 정보를 받을 수 있습니다. 

 

1
2
3
const navigation = useNavigation()
 
const isSubmitting = navigation.state === 'submitting'
cs

 

폼 제출 시 true를 받는 상수를 선언 후 

 

1
2
3
<button disabled={isSubmitting}>
  {isSubmitting ? "Submitting..." : "Save"}
</button>
cs

 

return에서 조건적으로 받아보면 폼이 제출 중일 때는 버튼이 Submitting...로 바뀝니다.

 

혹은 data를 넘기기 위해서 useNavigation을 이용할 수 있습니다. 

 

1
2
3
const navigation = useNavigation();
 
navigation(component명, {보내고 싶은 데이터 : 내용 }); 
cs

 

[ useSubmit ]

 

useSubmit을 사용하여 양식 내에서 값이 변경될 떄마다 양식을 제출할 수 있습니다.

 

1
useSubmit({내가 제출하려는 데이터},{Form에 })
cs

 

인자로 2개를 넣는데, 첫번째 인자에는 우리가 제출하려는 데이터를 넣고, 두 번째 인자에는 우리가 Form에 설정할 수 있는 것과 기본적으로 같은 값들을 설정할 수 있게 합니다.

 

예를 들어, method: delete, action: '/...' 과 같이 설정할 수 있습니다.

 

1
2
3
4
5
6
7
8
9
 const submit = useSubmit();
 
  function startDeleteHandler() {
    const proceed = window.confirm('Are you sure?'); 
 
    if (proceed) {
      submit(null, { method: 'delete'});
    }
  }
cs

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
export async function action({ params, request }) {
  const eventId = params.eventId;
  const response = await fetch('http://localhost:8080/events/' + eventId, {
    method: request.method,
  });
 
  if (!response.ok) {
    throw json(
      { message: 'Could not delete event.' },
      {
        status: 500,
      }
    );
  }
  return redirect('/events');
}
cs

 

Comments