2016-08-18 5 views
0

:Material-UI의 <TextField/>을 RE = 1로 올바르게 반환하려면 ReactJS에서 <input/>을 좋아하세요? 다음과 같은 방법으로

<input 
    className='form-control' 
    placeholder='Input Text' 
    ref='inputText' 
    type='text' 
    /> 

    <button 
    onClick={(event) => this.handleClick(event)} 
    > 

그리고 나는 시도 :

handleClick(event) { 
    const inputText = this.refs.inputText 
    console.log(inputText.value.trim()) 
    } 

나는 재료-UI의 <TextField/><input/> 같은 심판이 제대로 입력 된 텍스트를 반환하려고 노력하고는 <button/>으로 트리거 할 수 있습니다 다음은 <TextField/>이지만, undefined으로 반환됩니다. 위의 <input/>처럼 정확하게 입력 된 텍스트를 반환하려면 어떻게해야합니까?

<TextField 
    hint='Enter text' 
    className='form-control' 
    ref='inputText' 
    type='text' 
    /> 
+0

텍스트 필드는 추상화입니다. 즉, 참조를 배치 할 수없는 자체 반응 구성 요소입니다. 변경시 반환 값을 얻으려면'onChange = {}'를 사용하십시오. 특히, redux를 사용하면 모든 onChange에 대한 값을 업데이트 할 것이고, handleClick을 실행하면 해당 소품을 확인하면됩니다. – ajmajmajma

+0

@ajmajmajma 죄송 합니다만 Redux를 사용하여 그 예를 보여줄 수 있습니까?그래서 나는 대답을 받아 들일 수 있습니다. –

+0

문제 없습니다, 아래 나의 대답을 참조하십시오. 참고 : 나는'textFieldValue'를 업데이트하기 위해 액션 크리에이터와 리듀서를 보여주지 않았고, 당신이 어떻게하는지 알고 있다고 가정하고 있습니다. 그들을보아야 할 경우 의견을 남겨주십시오. – ajmajmajma

답변

0

당신은 사용해야 onchange를 = {} 값을 얻을 수 있습니다 :

가 휘는되는 valueonChange 기능을 사용하여 텍스트 필드를 설정 :이 접근 방식을 제안

_onChange = (e) => { 
    console.log(e.target.value); 
} 

<TextField 
    onChange={this._onChange} 
/> 
2

을 redux 자체로 들어가면 onChange 함수는 value을 업데이트합니다. textFieldChange는 단순히 textFieldValue 업데이트 작업이

<TextField 
     value={this.props.textFieldValue} 
     onChange={this.props.textFieldChange} 

:

그래서 당신은 이런 일이있을 것이다. 대부분의 양식 redux에서 이런 식으로 작동합니다. 그 소도구들과 행동을 위해 만든 이름들은 단지 예일뿐입니다. 나는 국가의 건축가의 일부를 형성 할 수 있기 때문에이 REDUX와 함께이 일을 좋아

state: { 
    form: { 
     textField: ...your textfield value here, 
     name: ..., 
     whateverElse: ... 
    } 
}; 

을 : 당신은 큰 양식이있는 경우 양식 당신이 가진 자체에 전념 상태 트리의 일부를 고려할 수 있습니다 어디서나 보낼 수있는 json payload처럼 보이기 때문에 거기에 양식을 보내서 보낼 수 있습니다.

어쨌든,이 예제로 돌아 가기. 클릭하면 지금 handleClick. 텍스트 필드가 변경 될 때마다 업데이트됩니다

handleClick(event) { 
    console.log(this.props.textFieldValue.trim()); 
} 

때문에, 당신은 항상 당신의 상태에 대한 액세스 권한을 가지고 : 당신이해야 할 일은이 값을 얻는 것입니다. 또한 refs을 사용하면 다른 구성 요소의 해당 양식에 액세스하는 데 더 많은 시간을 할애 할 수 있기 때문에 refs 방법보다 유연성이 있습니다. 이 방법을 사용하면 모든 정보가 주에 있으므로 언제든지 소품을 관리하는 한 언제든지 정보에 액세스 할 수 있습니다. 이 도움이

create(e) { 
    e.preventDefault(); 
    let name = this.refs.inputText.input.value; 
    alert(name); 
    } 

    constructor(){ 
    super(); 
    this.create = this.create.bind(this); 
    } 

    render() { 
    return (
      <form> 
      <TextField ref="inputText" hintText="" floatingLabelText="Your name" /><br/> 
      <RaisedButton label="Create" onClick={this.create} primary={true} /> 
      </form> 
    )} 

희망 :

+0

심층적 인 정보를 감사하십시오! 감속기 및 '주 : {form : {}}'에 전체 내용을 표시 하시겠습니까? 내가 물건을 갱신하면, 다른 물건에 대해 상태가 없어지는 것 같습니다. –

+0

이 접근 방식을 input [type = password]에 사용하는 것이 안전하다고 생각합니까? – transGLUKator

0

여기 onchange를 이벤트를 사용하는 것보다 더 나은 솔루션입니다, 우리는 직접 재료의 UI에 textField에 의해 생성 된 입력 값을 얻는다.