2016-07-14 15 views
1

私のreact.jsアプリケーションでフォームonSubmitメソッド(_updateThing)が起動されません。
ソースコードは以下の通りです。
問題は簡単だと思いますが、それを確認するのに多くの時間を費やしています。解決できません。私を助けてください。
フォームonSubmitメソッドはreact.jsでは機能しません

export default React.createClass({ 
    displayName: 'ThingContainer', 
    statics: { 
    load: function (context) { 
     return ThingActions.getData(context); 
    } 
    }, 
    mixins: [ContextMixin, MaterialRebindMixin], 
    getInitialState() { 
    return getThings(); 
    }, 
    _updateThing(e) { 
    alert(1); 
    e.preventDefault(); 
    }, 
    _setChangedText(event) { 
    alert('change'); 
    }, 
    render() { 
    return (
     <div> 
      <div> 
      <div> 
       <h2>Title</h2> 
      </div> 
      <form onSubmit={this._updateThing}> 
       <div > 
       <Label htmlFor="changeQuantity" text="" /> 
       <Input id="changeQuantity" name="changeQuantity" type="text" onChange={this._setChangedText} /> 
       </div> 
       <div className="form-footer"> 
       <div style={{float: 'right'}}> 
        <input type="submit" value="submit" /> 
       </div> 
       </div> 
      </form> 
      </div> 
     </div> 
    ); 
    } 
}); 


は、私が "フォームのonSubmit = {this._updateThing}" への "フォームのonSubmit = {this._updateThing.bind(この)}" が、何も変わっていない:私のコードで何が間違っている
かわった。
また、htmlソースを確認するためにChrome開発コンソールを使用している場合、onSubmitメソッド(_updateThing)はHTMLソースに表示されません。
Capture
ありがとうございます。

+0

が働いて、あなたの他のイベントハンドラはありますか? – Damon

+0

onChangeメソッド(_setChangedText)も私のreact.jsで起動されません、getInitialStateメソッドが機能しました。 – Ryu

答えて

1

大丈夫してみてください! 私は、サーバー側のレンダリング(React.renderToString)を使用してコンポーネントのHTMLをレンダリングしています。 コンポーネントはレンダリングされるだけですが、マウントされないため、マウントに関連するメソッドは呼び出されません。

詳細: https://facebook.github.io/react/docs/top-level-api.html#reactdomserver.rendertostring

+0

あなたはそれを理解してうれしい! – Damon

+0

ありがとうございました。 – Ryu

1

thisのコンテキストが保持されないという問題があります。 React.createClassを使用している場合は、thisが自動的にバインドされます(source)。これは、ReactデベロッパーがES6クラスに移行している場合にループする可能性があります。 ES6クラスのコンストラクタ構文では、そうではなく、必要に応じて独自のメソッドをバインドする必要があります。これを行う最も一般的な方法は、JSX内のbind(this)です。

例えば

、代わりの
onSubmit={this._updateThing}

は、私はその理由を見つけ、
onSubmit={this._updateThing.bind(this)}

+0

こんにちは、Damon。答えてくれてありがとう。あなたが言ったことを試しましたが、何も変わりません。私もchrome開発コンソールを使用してチェックし、onSubmitメソッドはHTMLソースには表示されません。 – Ryu

+0

バインドメソッドを追加した後に警告メッセージが表示されます。警告:bind():コンポーネントメソッドをコンポーネントにバインドしています。 Reactはこれを自動的に高性能で行いますので、この呼び出しを安全に削除することができます。 – Ryu

+0

ちょっと@Ryu。あなたの問題を解決しますか?もしそうなら、私たちは興味深い謎を持っています。 – Damon

関連する問題