2016-09-26 62 views
0

シリアルナンバーを入力する必要がある入力ボックスがあります。最大文字数は32で、文字数が32に達すると文字化けが止まるはずです。方法は機能していません。最初の方法は、いくつかのパターンが定義されているカスタム関数で状態を更新しようとしました。 2番目の方法は、私は小道具としてテキストフィールドコンポーネントでパターンを渡そうとしました。コンポーネントはreact-mdlであり、パターンが一致しないとエラーを表示します。reactjsの文字数を制限する

iは最初のテキストフィールドの例を(

<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 
/> 

最初の方法に、デフォルトで支柱としてTextFieldコンポーネントに渡されるパターンを変更しよう

第二の方法)

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

私はreact-mdl Textfieldコンポーネントではなくtextareaを使用しています。自分のコードに基づいて書いた小道具を置くことができますか? – milan

+0

おそらくテキストフィールドライブラリをカスタマイズする必要があります。https://github.com/tleunen/react-mdl/blob/master/src/Textfieldimp.jsのロジックに従って、暗黙のうちにテキストエリアが使用されていることがわかります。その内部にロジックを適用することができます。あなたの行動を達成するために "inputProps"を更新することができます。うまくいくと思う –

関連する問題