stateの入力の表示値を更新する場合は、this.setState
を使用して状態データを変更し、新しいデータを再レンダリングする必要があります。 input.key = valueを使うのは正しい方法ではありません。正しく
あなたがについて SETSTATE()を知っておくべき3つのものがあります状態を使用して
。
は、例えば直接
状態を変更しないでください、これはありません再描画 コンポーネントは以下となります。
//間違った
this.state.comment =「こんにちは」;
代わりに、使用SETSTATE():
//正しい
this.setState({コメント: 'ハロー'})。
がthis.stateを割り当てることができる唯一の場所はコンストラクタです。
は直接のFacebookからhere
を続きを読む私は実際にかかわらず、あなたのコードの再構築の少しをお勧めします。あなたの国の価値の一部としてコンポーネントを持つことは、実際には勧められません。私は、あなたの異なる入力をthis.state.inputsのデータオブジェクトとしてお勧めし、データをループし、レンダリングメソッドでそれぞれの表示を構築します。
:このような何かを、あなたのレンダリングで
inputs = {
1: {
selectedTime: 0:00,
selectedValue: 2
}
}
:
を使用すると、1つのあなたのthis.state.inputs入力(とあなたの入力はキーにアクセスするためのオブジェクトであると仮定)を持っているとします。このような
render() {
let inputs = Object.keys(this.state.inputs).map((key) => {
let input = this.state.inputs[key]
return (<SelectTimeInput
key={key}
name={'option_' + key}
placeholder={this.props.placeholder}
options={this.props.options}
onChange={this.onChange.bind(this, key)}
timeValue={input.selectedTime}
selectValue={input.selectedValue}
/>)
)}
return (
<div>
<button className="button" onClick={this.onAddClick}><i className="fa fa-plus" /></button>
{ inputs }
</div>
);
}
どのキーをonChangeにバインドしているので、どの入力を更新するかわかります。今、あなたのonChange
機能で、あなただけのSETSTATEで正しい入力の値を設定します。
onChange(event, key) {
this.setState({
inputs: Immutable.fromJS(this.state.inputs).setIn([`${key}`, 'selectedTime'], event.target.value).toJS()
// or
inputs: Object.assign(this.state.inputs, Object.assign(this.state.inputs[key], { timeValue: event.target.value }))
})
}
これがテストされていませんが、基本的にこの不変の文がthis.state.inputsのコピーを作成して設定しようとしていますキーに一致するオブジェクトの内部のselectedTime値をevent.target.valueに設定します。状態が更新され、再レンダリングがトリガされ、レンダリングで入力を再びループすると、新しい時間値がtimeValue
としてコンポーネントに使用されます。
Object.assign編集では、テストされていませんが、詳細はこちら[こちら]をご覧ください。 2基本的に、この文は、新しいtimeValue値をthis.state.inputs [key]オブジェクトとマージし、その新しいオブジェクトをthis.state.inputsオブジェクト全体とマージします。
これは意味がありますか?
あなたはコードを投稿できますか?私はそれが何であるかのアイデアを持っていますが、私はいくつかのコードを参照する必要があります – jacoballenwood
右のポストの上部に要点のリンクです! @jakeaaron –
わかりました、私の悪い.. – jacoballenwood