2017-06-01 20 views
0

の末尾にジャンプカーソルは、私はの真ん中にカーソルを置くたび、私はこのReduxのフォーム - 入力フィールド

<Field component={TestInput} name="testProp" /> 

のように使用している以下のクラス

export default class TestInput extends Component { 

    state = { 
     modified: false 
    }; 

    change = e => { 
     this.setState({ modified: true }); 
     this.props.input.onChange(e.target.value); 
    }; 

    render() { 
     return (
      <input type="text" value={this.props.input.value} onChange={this.change} className={!this.state.modified && this.props.meta.pristine ? 'default' : 'modified'} /> 
     ); 
    } 
} 

を持っていますフィールド内のテキストと文字を書くと、文字は正しい場所に表示されますが、カーソルはフィールドの最後にジャンプします。これは、this.setState({ modified: true });行以降のクラス変更によって発生します。この行をコメントアウトすると、これは起こっていません。私はそれを理解していない。私は間違って何をしていますか?それについて何かできますか?

答えて

1

これは、すなわち、onChangeイベントにあなたはthis.setStateが再度レンダリングするコンポーネントを強制することを知っているかもしれないとして、あなたはthis.setState({ modified: true })を持っているあなたがchange()機能がトリガーされます入力の値を変更しようとするたびに、たまたま今度は!this.state.modifiedがfalseを返すので、クラスはmodifiedに変更されます。つまり、最後までジャンプしているカーソルは、modifiedクラスを実行する何かを持っている可能性があります。

あなたの質問を見たり言い直したりする必要があるかもしれませんが、どうしたらいいですか?

+0

カーソルが入力の最後にジャンプしないようにするだけです。それで全部です。クラス自体とはまったく関係がありません。それは単なる例です。クラスは実際には存在しません。私がクラスを変更しなければ、カーソルは、書いた手紙の後に正しい場所にとどまります。だから、どうすれば違うのですか? – samuelg0rd0n

+0

最初に何をしたいですか?カーソルをどこにでも置かないようにするには、変更するクラスの条件文を削除してください。クラスに関係するものがあるあなたが言うならば**クラスを変更しなければ、カーソルは正しい場所に留まります** – aditya

+0

それは解決策ではありません:-(私は入力のクラスを変更する必要があります。それは正当な要件です、しかし同時に、これはどういうわけかカーソルにねじ込まれてしまい、私が間違ってやっているやり方を失ってしまいます。他の方法を使うべきです。 – samuelg0rd0n

関連する問題