2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

【React】TextFieldでEnterキーを押したときになぜかページが更新されてしまう件【MaterialUI】

Posted at

症状

MaterialUIのTextFieldを実装し、Enterを押したときにページが更新されてしまう事象に遭遇しました。 onKeyDownでeventを見てみようにも、ページが更新されてしまうため、エラーメッセージ自体が消えてしまいます。

以下が該当のソースです。

textField.jsx
import React, { Fragment } from 'react';
import TextField from '@material-ui/core/TextField';

export const textField = () => {

  return(
          <Fragment>
            <form className={classes.root} noValidate autoComplete="off">
              <TextField
                id="outlined-basic"
                label="Email"
                variant="outlined"
                fullWidth
                value={SessionEmailState.user.email}
                onChange={handleChange}
                onKeyDown={(event) => {
                  if (event.key === 'Enter')
                  console.log("enterを押しました")
                }
                }
              />
            </form>
          </Fragment>
  )
}

解決方法

onKeyDownに以下を記述することで解決しました。 おそらくですが、form要素のdefaulteventが原因だと思われます。

formのデフォルトの動作で、指定したURLにformの値を送信するもので、送信先のURLが指定されていなければ現在のURLに送信するようです。
結果的に、現在のURLがリロードしてしまうようです。

なので、以下のようにその動作をしないコードを記述して解決しました。別途Enterしたときにsubmitボタンの動作するようにする場合は、onKeyDownにsubmitを呼ぶようなfunctionを設定してやるとよさそうです。

textField.jsx
import React, { Fragment } from 'react';
import TextField from '@material-ui/core/TextField';

export const textField = () => {

  return(
          <Fragment>
            <form className={classes.root} noValidate autoComplete="off">
              <TextField
                id="outlined-basic"
                label="Email"
                variant="outlined"
                fullWidth
                value={SessionEmailState.user.email}
                onChange={handleChange}
                onKeyDown={(event) => {
                  if (event.key === 'Enter')
                    event.preventDefault();
                  console.log("enterを押しました")
          //ここにsubmit用の処理を書くとEnterを押したときに動作してくれる
                }
                }
              />
            </form>
          </Fragment>
  )
}

参考

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?