2017-06-01 68 views
0

我有下面的类终极版形式 - 光标跳到输入字段结束

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'} /> 
     ); 
    } 
} 

,我使用这样的

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

每当我将光标在中间字段中的文本并写入一个字母,该字母出现在正确的位置,但光标跳转到字段的末尾。这是由行this.setState({ modified: true });和随后的类更改引起的。如果我评论这条线,这不会发生。我不明白。我究竟做错了什么?我能做点什么吗?

回答

1

这发生在onChange事件,即每次尝试改变输入的值你change()功能被炒鱿鱼,时间,你有一个this.setState({ modified: true })正如你可能知道,this.setState强制组件重新呈现,并知道这一次,因为!this.state.modified将返回false,所以班级变为modified,这意味着它工作得很好,光标跳到最后可能有你的modified类,除了没有什么错。

您可能需要查看并更改您的问题,您希望发生什么?

+0

我只需要光标不要跳转到输入的末尾。就这样。这与班级本身毫无关系。这只是一个例子。这些类实际上不存在。如果我不改变班级,光标会留在我写的信后的正确位置。那么,我应该做什么不同呢? – samuelg0rd0n

+0

你最想做什么,如果你不想让光标去任何地方,你为什么不就这样,删除变化类的条件语句,这肯定与你的类有关,如果你说**如果我不改变类,光标停留在其正确的位置** – aditya

+0

但这不是一个解决方案:-(我需要改变输入类,这是一个合法的要求,isn'但是同时,这种方式会使光标变得麻木,我简直失去了我所做的错误或者我应该使用的其他方法。 – samuelg0rd0n