ReactでGithubのリポジトリブラウザを作ってみる (3)
前回の続き。
お題
今回のお題は、Clearボタンの実装。
Clearボタンを押すと、ユーザー名のテキストボックスと、検索済みのリポジトリ一覧をクリアします。
テキストボックスをクリアする
まずは、ユーザー名のテキストボックスのvalueを、ステートで管理します。value={this.state.username}
を追加しました。
class SearchBox extends React.Component { ... (snip) ... render() { return ( ... (snip) ... <input type="text" value={this.state.username} onChange={this.handleChange} placeholder="Enter username" /> ... (snip) ... ); }
次に、SearchBox
にClearボタンとClearボタンクリック時のイベントハンドラhandleClear()
を追加します。
handleClear()
では、setState()
を介してテキストボックスの値をクリアするようにしています。
class SearchBox extends React.Component { ... (snip) ... handleClear(e) { this.setState({username: ''}); } render() { return ( ... (snip) ... <input type="button" value="Clear" onClick={this.handleClear} /> ... (snip) ... ); } ... (snip) ... }
これでユーザー名をクリアすることができます。
constructor
で、handleClear()
をthisにbindするのをお忘れなく。
constructor(props) { ... (snip) ... this.handleClear = this.handleClear.bind(this); }
リポジトリ一覧をクリアする
ClearボタンクリックのイベントをApp
に通知するため、onClear()
をPropに追加します。
SearchBox
は、Clearボタンクリック時にこの関数を呼び出します。
class SearchBox extends React.Component { ... (snip) ... handleClear(e) { this.props.onClear(); this.setState({username: ''}); } ... (snip) ... } SearchBox.PropTypes = { ... (snip) ... onClear: React.PropTypes.func.isRequired };
App
では、SearchBox
に追加されたonClear
Propにコールバック関数handleClear()
を渡し、handleClear()
が呼び出された契機でthis.state.repositories
をクリアします。
class App extends React.Component { ... (snip) ... handleClear() { this.setState({repositories: []}); } render() { return ( <div> <SearchBox onSubmit={this.handleSubmit} onClear={this.handleClear} /> <RepositoryList repositories={this.state.repositories} /> </div> ); } ... (snip) ... }
以上で実装完了です。