javascript—使用钩子将光标放在自定义react函数组件的末尾

f8rj6qna  于 2021-09-13  发布在  Java
关注(0)|答案(0)|浏览(159)

在我的组件中,我有valuestate,它是文本的值,还有props.prevrequeststate,它存储使用enter键发送的上一个值。
我的目标是能够使用向上箭头显示以前的请求。
这是可行的,但当我按下向上箭头时,我也希望光标位于文本的末尾。
我不知道该怎么做。

import React, { useState, useRef} from 'react';
import Button from '@material-ui/core/Button';
import styles from 'styles/TextForm.module.css';

function TextForm(props) {
  const [valueState, setValueState] = useState('');
  const inputTextRef = useRef();

  function handleChange(e) {
    setValueState(e.target.value);
  }

  function submitText() {
    props.setBubbleTextState(valueState);
  }

  function handleKeyPress(e) {
    if (e.key === 'Enter') {
      submitText()
      setValueState('');
    }
    if (e.key === 'ArrowUp') {
      setValueState(props.prevRequestState);
    }
  }

  return (
    <div className={styles.container}>
      <input type="text" value={valueState} onChange={handleChange} className={styles.textForm} ref={inputTextRef}
             onKeyDown={handleKeyPress} placeholder='Entrez votre requête.' size='80'/>
      <Button variant="outlined" color="primary" onClick={submitText} className={styles.switchButton}> 
        Envoyer
      </Button>
    </div>
  );

}

export default TextForm;

我理解在handlekeypress(e)中使用:

e.input.selectionStart = props.prevRequestState.length
e.input.selectionStop = props.prevRequestState.length

将不工作,因为我的valuestate在按下箭头时未更新。
使用旧的setstate回调可以很好地工作,但是在这里,我不知道如何在状态更新时触发这个特定的操作,但是只有在这个特殊的向上箭头事件之后。我知道我需要结合使用useref和useffect,但我不知道正确的方法。
先谢谢你

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题