2つの反応クラスにはボタンを使用してフォームを返すレンダリング関数があります。クラスBからフォームを使用できるように、クラスBをインポートする必要がありました。React ES5:1つのボタンが2つの関数を呼び出す
私の問題:内部ボタンをクリックすると、外側ボタンもトリガーされますが、内部送信ボタン働く
私の試み:私はコンソールをチェックし、それは私に警告与えていることが判明:validateDOMNestingを:フォームは、フォームの子孫として出現することはできません。
私は研究を行い、問題はネストされたフォームの可能性があると考えました。だから私は、<div></div>
にクラスBの<form></form>
を変更することで、SOから回避策を見つけました。これはもはやフォームではありません。今はコンソール上でエラーが出ることはありませんが、問題はまだ残っています。内側のボタンをクリックすると、外側のボタンもトリガーされ、合計で2つの関数が呼び出されます。 (私は多分、タグを変更すると、ネストされたフォームの問題を変更しないか、多分私は他のクラスを参照する方法方法は完全に適切ではないん考えています私は本当にこのような現象を発生させるかを把握したい:私は助けを必要と
)
マイコード:を私は唯一の "handleRegAdd" 機能を起動する必要があり、クラスB、からボタンをクリックしたときに(
var classA = React.createClass({
render: function() {
return (
<div>
<form
className={this.props.className}
id={this.props.controllerSingular + '_form'}
onSubmit={this.handleSubmit}
ref="some_form"
>
<FieldSet>
<ClassB id={this.state.id} />
</FieldSet>
<button onClick={this.submit} className="btn btn-primary">
Save
</button>
</form>
</div>
)
},
})
var classB = React.createClass({
render: function() {
return (
<div>
<button id="some_ID" className="some_name" onClick={this.handleRegAdd}>
Add
</button>
</div>
)
},
handleRegAdd: function() {
var that = this
var regLines = this.state.regulation
regLines.push({
reg_id: null,
Type: $('.reg-type-select span.Select-value-label').text(),
id: that.props.id,
Hours: null,
Minutes: null,
Days: '',
Start: null,
End: null,
})
this.setState({
regulations: regLines,
})
},
})
)私はそれを簡略化していることに注意してください。ただし、クラスAのサブミット機能を起動しました
残念ながら、この単純化は問題の理解に不可欠なものを省いています。 'handleRegAdd'はどこに定義されていますか?参考までに、div内に他のものがなければ、div内にボタンをラップする必要はありません。 – Sia
しかし、答えはたぶんあなたが 'button'を使っていることで、ボタンのデフォルトの型は' submit'です。この投稿を参照してください。https://stackoverflow.com/questions/2825856/html-button-to-not-submit-form – Sia
@Sia私はhandleRegAddを更新しました。それは基本的に状態を設定した、それだけです。上記のコードのロジックが正しいと思われる場合は、エラーは他のものからのものであることを意味します。私はそれを調べます。たぶんそれは私が思った何かに起因するものではないかもしれません。 – aDev