Reactでダイナミックを作成しようとしました。これまでのところ、問題なくフォームを表示して隠すことができました。私は今作成されたフィールドから値を取得する必要があり、これはいくつかの問題を引き起こしています。反応で動的に作成された入力フィールドの値を取得する方法
これまでのコードです。
まず人がボタンをクリックしたときに追加されます私の動的コンポーネント:
const mediaFields = this.state.mediaFields.map((Element, index) => {
return <Element key={ index } index={ index } />
})
class MediaInput extends React.Component {
render() {
const linkName = `link-${this.props.index}`;
const contentName = `content-${this.props.index}`;
const linkValue = `this.props.${linkName}`;
const contentValue = `this.props.${contentName}`;
return (
<div>
<ControlLabel>Media (optional)</ControlLabel>
<input
name={ linkName }
value={ linkValue }
className="form-control"
placeholder="Add your media url"
type="text"
/>
<input
name={ contentName }
value={ contentValue }
className="form-control"
placeholder="Add your media content"
type="text"
/>
</div>
);
}
}
ファースト
これは、それがレンダリングされる私のフォームの一部である:私は親コンポーネントの状態でこれらの値を保存したい
<div>
{ mediaFields }
<Button onClick={() => this.add() }>Add media field</Button>
<Button onClick={() => this.remove() }>Remove media field</Button>
</div>
:
mediaUrls: { "link-0": null, "link-1": null, "link-2": null},
mediaContents: { "content-0": null, "content-1": null, "content-2": null}
少しばかりですが、この例を使用しようとしていました Example 私はlinkValueとcontentValueを設定した最初の部分が正しくないことを知っていますが、どのように修正する必要がありますか?
私はまだ要素にonChangeメソッドを渡す必要があることを知っていますが、それは次のステップです。
UPDATE:
私は、これはそれを行うためのクリーンな方法になると思いますが、今、私は別の問題を抱えています。
私は値を格納する配列を作成します。私は子供の中でそれらを読むことができますが、どのように今私は親の変更を保存するのですか?親の中の子供のインデックスを読むには、どうすれば適切な場所に保存することができますか?
class MediaInput extends React.Component {
render() {
const linkName = `link${this.props.index}`;
const contentName = `content${this.props.index}`;
return (
<div>
<ControlLabel>Media (optional)</ControlLabel>
<input
onChange={this.props.handleChange}
name={ linkName }
value={ this.props.mediaUrls[this.props.index]}
className="form-control"
placeholder="Add your media url"
type="text"
/>
<input
name={ contentName }
value={ this.props.mediaContents[this.props.index]}
className="form-control"
placeholder="Add your media content"
type="text"
/>
</div>
);
}
}
mediaUrls: [ '', '', ''],
mediaContents: ['', '', ''],
どのようにすべきである私のhandleChange機能を見て、私は入力が変化するたびにSETSTATEしたい場合は?私はインデックスを読んでそれに基づいて私の配列を変更したい。
// Handle media fields
handleChange(e){
const mediaUrls = this.state.mediaUrls;
// based on the index, change the value in the array
this.setState({ ??? });
}
は、なぜあなたは、あなたが設定した第1の部分は 'linkValue'と' contentValue'が修正されていないことを言うのですか? – 0xcaff
Reactドキュメントのこの記事はあなたの質問に答えるはずです。 https://facebook.github.io/react/docs/forms.html – 0xcaff
linkValueとcontentValueを使用したとき、実際には小道具から値を取得する代わりに文字列としてテキストが表示されるためです。 – Deelux