現象
フォームのonSubmitイベントハンドラ にて、react-router-domを使ってhistory.push('xxx')のように画面遷移を行うと、コンソールにForm submission canceled because the form is not connectedというエラーが表示される。
import React, {FC, FormEvent} from 'react';
import {useHistory} from 'react-router-dom';
const App: FC = () => {
  const history = useHistory();
  const handleFormSubmit = (event: FormEvent) => {
    // event.preventDefault();
    history.push('/aaa');
  }
  return (
    <form onSubmit={handleFormSubmit}>
      <button>送信</button>
    </form>
  )
};
export default App;
解決方法
フォームの送信をpreventDefaultメソッドでキャンセルすればよい。
(上記ソースのコメントアウトしている部分)
submitによる画面遷移とpushメソッドによる画面遷移が競合しているため、エラーが表示されると推測される。
window.location.href='xxx';の場合はこのエラーが表示されない。
pushメソッドがDOMのform要素を削除するような処理をしているのかもしれない。
※ 詳しい人、いましたらコメントをください
そもそも、このような書き方をしていること自体が間違っていて、type=”button”のボタンのclickイベントで画面遷移を行うのが一般的だと思われる。
  
  
  
  
                  

コメント