2016-09-26 2 views
0

일련 번호가 입력되어야하는 입력 상자가 있습니다. 최대 문자 수는 32이므로 문자 수가 32에 도달하면 문자 메시지가 중지되어야합니다. 두 가지 방법으로 시도했지만 모두 방법이 작동하지 않습니다. 첫 번째 방법은 패턴을 정의한 사용자 지정 함수로 상태를 업데이트하려고했습니다. 두 번째 방법은 소품으로 텍스트 필드 구성 요소에서 패턴을 전달하려고했습니다. 구성 요소는 react-mdl이고 패턴이 일치하지 않으면 오류를 표시합니다.reactjs의 문자 수 제한

처음 텍스트 필드의 예제 (

<Textfield 
    onChange={(event)=> {this.handleInputChange(event)}} 
    pattern="-?[0-9]*(\.[0-9]+)?" 
    error="Input is not a number!" 
    label="Device Serial Number" 
    floatingLabel 
/> 

<Textfield 
    onChange={(event)=> {this.handleInputChange(event)}} 
    pattern="-?[0-9]*(\.[0-9]{6,32})?" 
    error="Input is not a number!" 
    label="Device Serial Number" 
    floatingLabel 
/> 

첫번째 방법 기본적으로 소품으로 텍스트 필드 구성 요소에 전달되는 패턴을 변경하려고

번째 방법)

const extract = (str, pattern) => (str.match(pattern) || []).pop() || ''; 

const extractPattern = (str) => extract(str, "-?[0-9]*(\.[0-9]+)?"); 

const limitLength = (str, length) => str.substring(0, length); 


export default class App extends Component { 
    constructor(props){ 
    super(props); 
    this.state = {max_char:32, limit:{}}; 
    this.handleChange = this.handleChange.bind(this); 
    } 


    handleChange(charLength){ 
     console.log('charLength',charLength); 
     this.setState({ 
     max_char:32 - charLength.length, 
     limit:limitLength(extractPattern(charLength), 32), 
     }); 
     console.log('charLength', charLength); 
     // console.log('limitLength', this.state.limit); 
    } 
+0

함수 내부에서 길이를 확인하지 않는 이유는 무엇입니까? 32보다 크면 더 이상 입력에 문자를 추가하지 마십시오. – Kafo

+0

구성 요소가 일반 HTML 입력 필드를 사용하는 경우 입력이 변경 될 때마다 텍스트 길이를 확인하는 함수를 호출하는 대신 입력 필드에 maxLength를 설정하지 않으시겠습니까? – pll33

+0

react-mdl Textfield 구성 요소를 사용하고 있습니다. – milan

답변

0

소품을 사용하면 textArea에 maxLength 속성을 설정할 수 있습니다. 어떤 상수 값을 의미합니다. this.props.customLength=32. 상태로 유효성 검사를 제공하는 것은 좋지 않습니다. 상태에 가능한 한 최소 데이터가 있어야합니다.

+0

나는 text-area가 아닌 react-mdl Textfield 구성 요소를 사용하고 있습니다. 내 코드를 기반으로 작성한 소품을 배치 할 수 있습니까? – milan

+0

아마도 textField 라이브러리를 사용자 정의해야 할 것입니다. https://github.com/leunen/react-mdl/blob/master/src/Textfieldimp.js 논리에 따르면 내재적으로 텍스트 영역이 사용되는 것을 볼 수 있습니다. 그래서 내부 로직을 적용 할 수 있습니다. 귀하의 행동을 달성하기 위해 "inputProps"를 업데이트 할 수 있습니다. 희망은 작동합니다. –