2016-10-28 1 views
0

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> 
    ) 
    } 
})