2016-10-28 7 views
0

I持ってthis.refs.searchString.valueで正常に動作しますが、それはもし私だけevent.target.value代わりに働くだろう、以下のコンポーネント?もしそうなら、どれが好ましい方法ですか?それぞれの長所と短所は何ですか?ドキュメントwe souldn't overruse refsで述べたように反応ref.example.value対e.target.value

const SearchBar = React.createClass({ 

    handleSubmit (event) { 
    event.preventDefault() 
    const formattedSearchString = this.refs.searchString.value.replace(/[^a-z]/gi, "").toLowerCase() 
    this.refs.searchString.value = '' 
    this.props.submitSearch(formattedSearchString) 
    }, 
    render() { 
    return (
     <form className="form form-group has-info col-md-4 text-align-center" onSubmit={this.handleSubmit}> 
     <input className="search-input form-control" type="text" ref="searchString" placeholder=" . . . enter pokemon name" /> 
     <button className="btn btn-info btn-raised" type="submit" name="button">Search!</button> 
     </form> 
    ) 
    } 
}) 
+0

「event.target.value」が好ましい。 Refsを過度に使用しないでください。 https://facebook.github.io/react/docs/refs-and-the-dom.html#dont-overuse-refs –

答えて

0

は、Controlled Componentsを使用してevent.target.valueを使用することを好みました。

const SearchBar = React.createClass({ 
    getInitialState(){ 
    return {textValue: ""}; 
    }, 
    onTextChange(evt) { 
    this.setState({textValue: evt.target.value}); 
    }, 
    handleSubmit (event) { 
    event.preventDefault() 
    const formattedSearchString = this.state.textValue.replace(/[^a-z]/gi, "").toLowerCase() 
    this.refs.searchString.value = '' 
    this.props.submitSearch(formattedSearchString) 
    }, 
    render() { 
    return (
     <form className="form form-group has-info col-md-4 text-align-center" onSubmit={this.handleSubmit}> 
     <input className="search-input form-control" type="text" value={this.state.textValue} onChange={this.onTextChange} placeholder=" . . . enter pokemon name" /> 
     <button className="btn btn-info btn-raised" type="submit" name="button">Search!</button> 
     </form> 
    ) 
    } 
})