質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Onsen UI

HTML5で記述されたモバイルアプリの高速化、およびネイティブアプリライクなUIが作れるフレームワーク。 様々なJavaScriptフレームワークと併せて使用することができます。スマートフォン向けアプリ、Webサイトに必要なアニメーション、UI/UXを実装することが可能になります。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

Q&A

解決済

1回答

2328閲覧

Reactのformが上手く動作しない

退会済みユーザー

退会済みユーザー

総合スコア0

Onsen UI

HTML5で記述されたモバイルアプリの高速化、およびネイティブアプリライクなUIが作れるフレームワーク。 様々なJavaScriptフレームワークと併せて使用することができます。スマートフォン向けアプリ、Webサイトに必要なアニメーション、UI/UXを実装することが可能になります。

React.js

Reactは、アプリケーションのインターフェースを構築するためのオープンソースJavaScriptライブラリです。

0グッド

0クリップ

投稿2017/10/04 09:48

OnsenUIとReactを使ってアプリ開発をしています。
この中でformのinputを実装しているのですが、上手く動作しません。

フレームワークにはreact-materializeのInputを使っていますが、
react-onsenuiのInputでも、デフォルトのinputでも同じような挙動になります。

いくつか試してみました。

javascript

1class TestInputField extends React.Component { 2 3 constructor(props) { 4 super(props) 5 this.state = { 6 yourName: 'test', 7 } 8 } 9 10 handleChange(e){ 11 console.log(`handleChange ${this.state.yourName}`); 12 this.setState({ 13 yourName: e.target.value, 14 }) 15 } 16 17 render() { 18 return( 19 <div> 20 <form> 21 <Input 22 className="input-fields" 23 s={10} 24 label="your name" 25 value={this.state.yourName} 26 onChange={this.handleChange} 27 /> 28 </form> 29 </div> 30 ) 31 } 32}

このままだと文字は入力できるのですが、コンソールを見ると
Cannot read property 'state' of undefinedというエラーが表示されています。

調べてみるとbind(this)をしていないからとあったので、コンストラクタの中に1行追加してみました。

javascript

1 constructor(props) { 2 super(props) 3 this.state = { 4 yourName: 'test', 5 } 6 this.handleChange = this.handleChange.bind(this) 7 }

こうするとエラーは表示されなくなったのですが、以下のgif画像の様に一文字入れるたびにフォーカスが離れてしまいます。連続で文字を打つためには一文字入力するたびにクリック(またはタップ)する必要があります。
これはmonacaのLocalKitのプレビュー上の画像ですが、デバッガーを使ってスマホ上で操作してみても同じ現象が起きました。

イメージ説明

javascript

1<Input 2 className="input-fields" 3 s={10} 4 label="your name" 5 value={this.state.yourName} 6 onChange={(e) => this.handleChange(e)} 7 />

知識がないなりにonChangeの書き方がまずいのかと思い上の様に変更してみましたが、同じくエラー無しで人文字入力するたびにフォーカスが離れています。

これは、monaca,OnsenUI,Reactの使い方のどこに問題があるのでしょうか。
どなたかご存じの方がいらっしゃれば教えて頂けるとうれしいです。
よろしくお願いします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

※注意 この記法はES7以降、またはBabelでプラグインを入れた場合しか使用できないようです
http://blog.jeremyfairbank.com/javascript/javascript-es7-function-bind-syntax/

thisbindする関数オブジェクトの渡し方は以下のような書き方がスマートです。function bind syntaxというそうです。

javascript

1<Input 2 className="input-fields" 3 s={10} 4 label="your name" 5 value={this.state.yourName} 6 onChange={::this.handleChange} 7 />

「一文字入れるたびにフォーカスが離れてしまいます」とのことですが、そちらは私にはわかりません。React単体ではこれで問題なく動きますので、おそらくOnsenUIかMonacaが原因かと思われます。

投稿2017/10/04 10:10

編集2017/10/05 00:04
masaya_ohashi

総合スコア9206

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2017/10/04 10:43

回答ありがとうございます。 その記法は初めて見たのですが、なんというキーワードで調べると出てきますでしょうか?
masaya_ohashi

2017/10/05 00:05

どこかで見て以来自然と使っていたので自分でも知りませんでしたが、情報を追記しました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問