2017-10-25 6 views
0

내가했다가, 숨길 editing: true로 상태를 변경하는 원인이 나는 SocialPostwithCSSonClick에 이름 <p> 하위 구성 요소와 <div><textarea>이 나타날 것입니다 내가 사용하는 것이 this.textarea.focus은 텍스트 영역이 ref={(input)=>{this.textarea=input}}이고 문제가 없습니다.ReactJS은 - 얼마나 후하게 구성 요소에 초점을 얻을 수 있습니다 볼 수

영역을 자동 크기 조정해야하므로 NPM 패키지 TextareaAutosize을 다운로드했습니다. 이제이 텍스트 영역에 초점을 맞추는 데 문제가 있습니다. 확인, npm TextareAutosize 파일에 class이 있으며 상태 비 저장되지 않습니다. 현재 this.textareaundefined

요약을 반환 : 나는 상태 변경 <TextareaAutosize>을 표시하는 원인이 <div>onClick<TextareaAutosize />에 초점을 맞출 수 있습니까? 다음은

파일 :

looking at the code에서
import React, { Component } from 'react' 
import SocialPostWithCSS from './SocialPostWithCSS' 
import TextareaAutosize from 'react-autosize-textarea' 

class SocialPost extends Component { 
    constructor(props) { 
     super(props) 
     this.state = { 
      message: this.props.socialPost.message, 
      editing: false 
     } 
    } 
    _clickToEdit() { 
     this.textarea.focus() 
    } 
    render() { 
     return (
      <div> 
       {(!this.state.editing) ? 
        <div onClick={async()=>{await this.setState({editing: true});this._clickToEdit}}> 
         <SocialPostWithCSS >{this.state.message}</SocialPostWithCSS> 
        </div> 
        :<div> 
         <TextareaAutosize 
          onBlur={() => {this.setState({ editing: false})}} 
          type='text' 
          ref={(input)=>{this.textarea=input}} 
          value={this.state.message} 
          /> 
        </div> 
       } 
      </div> 
     ) 
    } 
} 
export default SocialPost 

답변

3

, TextareaAutosize이 innerRef라는 소품을 통해 내부 심판 노출 것으로 보인다. 그래서 다음과 같이 코드를 변경 : this.state.editing 때

<TextareaAutosize 
    onBlur={() => {this.setState({ editing: false})}} 
    type='text' 
    innerRef={(input)=>{this.textarea=input}} 
    value={this.state.message} 
/> 
+0

너 선생님, 지역 천재입니다. 이것은 효과가있다! 내 진드기가 무슨 뜻인지 말해 줄 수있어? 이 코드 스 니펫, line 72-79'saveDOMNodeRef = ref => { const {innerRef} = this.props; if (innerRef) { innerRef (ref); } this.textarea = ref; ' –

+2

'ref'는 구성 요소의 기본 DOM 노드에 대한 액세스를 제공합니다. 하지만 TextareaAutosize에는 dom 노드가 없으며 어쨌든 직접 연결할 수 없습니다. 대신, 그것은