일련 번호가 입력되어야하는 입력 상자가 있습니다. 최대 문자 수는 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);
}
함수 내부에서 길이를 확인하지 않는 이유는 무엇입니까? 32보다 크면 더 이상 입력에 문자를 추가하지 마십시오. – Kafo
구성 요소가 일반 HTML 입력 필드를 사용하는 경우 입력이 변경 될 때마다 텍스트 길이를 확인하는 함수를 호출하는 대신 입력 필드에 maxLength를 설정하지 않으시겠습니까? – pll33
react-mdl Textfield 구성 요소를 사용하고 있습니다. – milan