2017-08-24 73 views
0

react_on_rails gemに基づいてサンプルアプリケーションを作成しようとしています。私の反応コードでは、onChangeonSubmitのようなinbuild関数は反応しません。react_on_railsで反応しないonChangeメソッドが反応しない

My HelloWorldWidgetコンポーネントは次のようになります。

... 
constructor(props, context) { 
    super(props, context); 
    _.bindAll(this, 'handleChange'); 
} 

handleChange(e) { 
    const name = e.target.value; 
    console.log(name); 
    //this.props.updateName(name); 
} 

render() { 
    const { name } = this.props; 
    return (
    <div className="container"> 
     <h3> 
     Hello, {name}! 
     </h3> 
     <input className="form-control input-sm col-sm-4" type="text" onChange={this.handleChange}/> 
    </div> 
); 
} 

また、私は、サーバー側が私のviews/hello_world/index.html.erbファイルで私のコンポーネントの事前レンダリング無効にした場合、コンポーネントは、UI上でレンダリングされていません。

<%= react_component("HelloWorldApp", props: @hello_world_props , prerender: false) %> 

GitHubのレポ:react-on-rails-sample-app

+0

エラーが発生しますか? '_.bindAll(this、 'handleChange');'は何ですか? –

+0

エラーはありません。すべての関数を 'this'コンテキストに束縛するのはlodash関数です。 –

答えて

0

次のように矢印の機能を使用してみてください:

onChange={(e) => this.handleChange(e)} 
+0

私はこれを以前に試みましたが、うまくいきませんでした。この問題は、サーバー側のレンダリングが正しいために発生している可能性がありますが、何が起こっているのか正確にはわかりません。 –

1

_.bindAll方法がどこから来た私はよく分からないが、結合ハンドラのオーソドックスな方法はこれであります構文:
this.handleChange = this.handleChange.bind(this);

arrow機能を使用する場合は、それをclassに結合する。

handleChange = (e) => { 
    const name = e.target.value; 
    console.log(name); 
    //this.props.updateName(name); 
} 
+0

'_.bindAll'は、複数の関数を結合するためのlodash関数です。私は 'this.handleChange = this.handleChange.bind(this); 'で試しましたが、コンソールにはログインしません。 –

関連する問題