按下 Enter 键时如何将焦点更改为另一个组件

阿卜杜先生

descriptionTaskCard组件enter上按下键后,如何将焦点更改为组件中的字段InputField

那是父组件

export default class Task extends Component {

  constructor(props) {
    super(props)
    this.state = { cardID: '', list: [] }
    this.handleAdd = this.handleAdd.bind(this)
    this.handleChange = this.handleChange.bind(this)
    this.handleEdit = this.handleEdit.bind(this)
    this.handleRemove = this.handleRemove.bind(this)
    this.refresh()

  }
  handleAdd = (event, cardID) => {
        ...
  }

  handleChange(e) {
    ...
  }

  handleEdit = (e, task) => {    
    task.description = e.target.value
    axios.put(`${URL}/${task._id}`, task)
      .then(resp => this.refresh(this.state.description))
  }

  refresh() {
    ...
  }

  handleRemove = task => {
    ...
  }

  render() {
    return (
      <Fragment>        
        <Row className="card-columns">
          <taskCard title="Task Board" cardID='1' color='blue-violet'
            handleAdd={this.handleAdd}
            handleChange={this.handleChange}
            handleEdit={this.handleEdit}
            description={this.state.description}
            list={this.state.list}
            handleRemove={this.handleRemove}          
          />
      </Fragment >
    )
  }
}

TaskCard组件包含description input field. 这是需要获得焦点的领域:

    const TaskCard = props => {

      const renderRows = () => {
        const list = props.list || []

        return list.map(task => (
          task.cardID === props.cardID &&
            <InputField task={task} 
              handleChange={props.handleChange}
              handleEdit={props.handleEdit}
              handleRemove={props.handleRemove}  
              />
        ))
      }

      return (
        <Fragment>           
                {renderRows()}

                <Form>
                    {/* input who needs to receive focus */}
                    <Form.Control className='input-field description' name='description' type="text" placeholder="Insert a task"
                      onChange={props.handleChange}
                      onKeyPress={event => {
                        if (event.key === 'Enter') {
                          props.handleAdd(event, props.cardID)
                          event.target.value= ''
                          event.preventDefault()
                        }
                      }}
                    />
                </Form>
        </Fragment >
      )
    }

export default TaskCard

Input field组件是用户编辑任务并按 的地方EnterEnter按下时,任务被修改,我想集中description fieldTaskCard组件

const InputField = props => {

  return (
    <Fragment>
      <Row>
        <Col xs={12} style={{paddingRight: 0}}>
          <Form>
            <Form.Group controlId="formBasicEmail">
              <Form.Control className='inputs-field' type="text" name={props.task._id}
                placeholder={props.task.description}             
                onChange={props.handleChange}
                onKeyPress={event => {
                  if (event.key === 'Enter') {
                    props.handleEdit(event, props.task)
                    event.preventDefault()

                  }
                }}
              />
            </Form.Group>
          </Form>
        </Col>        
      </Row>

    </Fragment >
  )
}

export default InputField
特拉维斯·詹姆斯

使用 refs 获取对 TaskCard 中输入的引用并将其传递给您要关注的输入:

    const TaskCard = props => {

      // useRef here
      const inputRef = useRef(null)

      const renderRows = () => {
        const list = props.list || []

        return list.map(task => (
          task.cardID === props.cardID &&
            <InputField task={task} 
              handleChange={props.handleChange}
              handleEdit={props.handleEdit}
              handleRemove={props.handleRemove}  
              />
        ))
      }

      return (
        <Fragment>           
                {renderRows()}

                <Form>
                    {/* input who needs to receive focus */}
                    ...
                      // pass ref here
                      ref={inputRef}
                      }}
                    />
                </Form>
        </Fragment >
      )
    }

export default TaskCard

然后在<InputField />组件中传递引用:

<InputField task={task} 
              handleChange={props.handleChange}
              handleEdit={props.handleEdit}
              handleRemove={props.handleRemove} 
              // pass the ref down
              inputRef={inputRef} 
              />

然后从 <InputField />组件中调用它,就像这样调用 handleEdit 函数:

() => {
   props.handleEdit()
   props.inputRef.current.focus()
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

按下Enter键时如何将焦点移至下一个字段?

来自分类Dev

按下Enter键将焦点设置到下一个nextbox

来自分类Dev

按下Enter键时忽略动作

来自分类Dev

如何防止用户按下ENTER键?

来自分类Dev

如何发送按下ansible的ENTER键?

来自分类Dev

JavaFX:按下捕获“ Enter”键

来自分类Dev

按下ENTER键提交表单

来自分类Dev

组合框Enter或Tab键按下

来自分类Dev

防止按下Enter键-Vue

来自分类Dev

按下Enter键时运行Javascript

来自分类Dev

按下ENTER时提交特定按钮

来自分类Dev

按下Enter键时如何移动到下一个输入字段?

来自分类Dev

在按下Enter键时将焦点设置到下一个nextbox

来自分类Dev

按下Enter键时如何使函数执行某些操作

来自分类Dev

当按下Enter键时,如何触发Tab键按下?

来自分类Dev

如何让bash在按下时而不是按ENTER时读取“按下的键”

来自分类Dev

当按下Enter键时,在Repeater内创建一个asp:TextBox触发Repeater的ItemCommand

来自分类Dev

反应-在更改事件中检测到'enter'键按下

来自分类Dev

按下Enter键后如何进入下一个文本框?

来自分类Dev

如何防止在一个按钮上多次连续按下“Enter”键

来自分类Dev

在输入上按下Enter键时注入HTML

来自分类Dev

按下“ enter”键时触发jquery“ on click”功能

来自分类Dev

按下Enter键时Angularjs的默认操作

来自分类Dev

按下Enter键时获取输入文本的值

来自分类Dev

按下Enter键时不刷新页面

来自分类Dev

按下Enter键时要做的事情

来自分类Dev

按下Enter键时触发的余烬动作

来自分类Dev

jQuery:按下Enter键时显示的内容

来自分类Dev

按下Enter键时,使用JavaScript触发按钮点击

Related 相关文章

热门标签

归档