<現状>
現在、Material-UIのTextFieldコンポーネントの初期値を消すことができなく、困っています。
defaultValueをセットしてみたり色々試しましたが、うまく行きません。宜しくお願いします。
<実現したいこと>
①Material-UIのTextFieldで数値を扱いたい
②Material-UIのTextFieldの初期値を0にセットしたい
③Material-UIのTextFieldの値を削除して、新規の値を入力したい
④Material-UIのTextFieldの値を0にするクリアボタンを作成したい
<コード>
js
1import React from 'react' 2import TextField from '@material-ui/core/TextField' 3 4export default class App extends React.Component { 5 constructor(props) { 6 super(props) 7 this.state = { 8 d1: 0 9 } 10 } 11 12 handleChange = (event) => { 13 this.setState({ 14 [event.target.name]: Number(event.target.value) 15 }) 16 } 17 18 handleClear = () => { 19 this.setState({ 20 d1: 0 21 }) 22 } 23 24 render(){ 25 <div> 26 <TextField 27 type="number" 28 name="d1" 29 InputLabelProps={{ 30 shrink: true, 31 }} 32 margin="dense" 33 value={this.state.d1} 34 onChange={this.handleChange} 35 /> 36 <Button onClick={ this.handleClear }> 37 クリア 38 </Button> 39 </div>
削除キー/バックスペースキーを押下してもテキストフィールドの中に0が残り続けて困っている、という認識で合っていますか?
constructor で handleChange と handleClear に this を bind すべきでは?
https://ja.reactjs.org/docs/faq-functions.html
@itepechi
その通りです。わかりにくくてすいません。0が消せず、5を入力すると05となってしまいます。
@hoshi-takanori
できました!ありがとうございます。bindに対する理解が不十分なようなので、勉強します!
@itepechi
ありがとうございます。
質問文のコードはアロー関数を使用しているのでbind(thisの束縛)は必要ありません(https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions/Arrow_functions)
@hoshi-takanori @itepechi
一度、バックスペースキーでテキストフィールドの中の0が消えたのですが、もう一度やり直してみたところ、0が消えません。先程のできたを訂正します。
@itepechi
そうですね。見落としてました。ご指摘ありがとうございます。
@action_moto
クリアした時に 0 が残るのが問題なら、handleClear で d1 を 0 にしているのが原因なので、空文字列にすればいいのでは。
また、テキストフィールドが 0 のときにバックスペースを押しても消えないのは、event.target.value は空文字になるけど、handleChange でそれを数値に変換してるために 0 になるからでしょうね。
回答1件
あなたの回答
tips
プレビュー