2017-09-12 2 views
1

나는 redux-form을 사용하고있다. 그러나 타이핑을 시작할 때 포커스가 처음으로 반응한다.반응에서 JS 필드가 첫 번째 이후에 포커스를 잃는다 onChange

아래의 구성 요소는 문자 입력 후 입력 필드가 포커스를 잃습니다. Chrome의 Inspector를 사용하는 동안 입력 할 때 입력 필드의 value 속성 대신 전체 양식이 다시 렌더링되는 것처럼 보입니다.

코드는 아래를 참조하시기 바랍니다 :

<Field 
     name='description' 
     // onChange={this.handleChange.bind(this)} 
     //value={this.state.description} 
     component={props => { 
      return (
      <MentionTextArea {...props} userTags={userTags} tags={postTags}/> 
     ) 
     }} 

MentionTextArea 구성 요소 :

import React, {Component, PropTypes} from 'react' 
import { MentionsInput, Mention } from 'react-mentions' 
import defaultStyle from './defaultStyle' 

class MentionTextArea extends Component { 
    constructor(props) { 
     super(prop) 
    } 
    handleOnChange (e) { 
     this.props.input.onChange(e.target.value); 
    } 
    render() { 
     // const { input, meta, ...rest } = this.props; 
     return (
      <MentionsInput 
       value={this.props.input.value || ''} 
       onChange={this.handleOnChange.bind(this)} 
       singleLine={false} 
       style={ defaultStyle } 
       markup="@[__display__](__type__:__id__)" 
       > 
        <Mention trigger="@" 
         data={this.props.userTags} 
         type="userTags" 
         style={{ backgroundColor: '#d1c4e9' }} 
         renderSuggestion={ (suggestion, search, highlightedDisplay) => (
          <div className="user"> 
           { highlightedDisplay } 
          </div> 
         )} 
        /> 
        <Mention trigger="#" 
         data={this.props.tags} 
         type="tags" 
         style={{ backgroundColor: '#d1c4e9' }} 
         renderSuggestion={ (suggestion, search, highlightedDisplay) => (
          <div className="user"> 
           { highlightedDisplay } 
          </div> 
         )} 
        /> 
      </MentionsInput> 
     ); 
    } 
} 

export default MentionTextArea 

이 도와주세요!

+0

가 어떻게 양식 –

+0

를 렌더링하는 보여줄 수

<필드 이름 = '설명' //의 onChange = {this.handleChange.bind (this)} //value={this.state.description} 구성 요소 = {props => { return ( ) } let 연결 = 연결 (mapStateToPr 작전, mapDispatchToProps) = 연결 var에 reduxConnectedComponent (CreatePostForm) 수출 기본 reduxForm ({ 형태 : 'CreatePost'//이 양식 에 대한 고유 식별자}) (reduxConnectedComponent) –

+0

당신이 유일하게있는 키 어딘가를주고있다 생성됩니다. 또한 {link : connect (mapStateToProps, mapDispatchToProps)} var reduxConnectedComponent = reduxForm ({form : 'CreatePost'//이 양식의 고유 식별자}) 기본 연결 내보내기 (reduxConnectedComponent)' –

답변

1

그것은 REDUX 형태로 새로운 사람들 당신이 거기에 대한 답을 찾을 수 있습니다이 issue 확인하시기 바랍니다에 대한 일반적인 문제입니다 사전에

감사합니다.

render() 메서드 외부에서 상태 비 저장 함수를 정의해야합니다. 그렇지 않으면 렌더링 할 때마다 다시 작성되며 해당 구성 요소 prop가 다를 수 있기 때문에 필드를 다시 렌더링해야합니다. 공식 redux-form documentation에서 예 :

// outside your render() method 
const renderField = (field) => (
    <div className="input-row"> 
     <input {...field.input} type="text"/> 
     {field.meta.touched && field.meta.error && 
     <span className="error">{field.meta.error}</span>} 
    </div> 
) 

// inside your render() method 
<Field name="myField" component={renderField}/> 
+0

이걸 보았지만 작동하지 않습니다. –

+0

작동하지 않는 것은 arrow 함수를 사용하여 MentionTextArea를 만드는 것입니다. 당신은 이것을 할 수 없습니다. 이것은 모든 렌더링마다 새로운 컴포넌트 함수를 생성합니다. 따라서 입력 내용에 초점이 맞지 않는 것은 정상적인 동작입니다. 문서에서 [example] (https://redux-form.com/7.0.4/docs/api/field.md/#2-a-stateless-function)을보고 코드를 다시 작성하십시오. – mradziwon

+0

고마워 ... 일하고있다 –