小编典典

反应-在更改事件中检测``输入''键按下

reactjs

我有一个React组件,或多或少是一个简单的文本区域,用户可以在其中键入内容。到目前为止,代码如下所示:

import React from 'react';
import {connect} from 'react-redux';

function handleChange(event) {
    const {setText} = this.props;

    //is there some way I can detect [ENTER] here and call this.props.add instead?
    setText(event.target.value);
}

class TextArea extends React.Component {
    constructor(props) {
        super(props);
    }

    render() {
        const {value} = this.props;

        return (
            <div className="list-item">
                <textarea
                    className="form-control"
                    value={value}
                    onChange={handleChange.bind(this)}
                />
            </div>
        );
    }
}

function mapStateToProps(state) {
    return {
        value: state.value
    }
}

function mapDispatchToProps(dispatch) {
    return {
        setText(text) {
            const action = {
                type: 'set-text',
                text: text
            };

            dispatch(action);
        },
        add() {
            const action = {
                type: 'add'
            };

            dispatch(action);
        }
    }
}

export default connect(mapStateToProps, mapDispatchToProps)(TextArea)

该组件连接到redux存储,每次用户在文本区域中键入内容时,该存储都会更新。redux存储将新值发送回textarea组件,并且textarea组件重新渲染以显示新值。

到目前为止,尽管此方法仍然有效,但如果按下Enter键,我希望此组件的行为有所不同。由于更改事件不会公开keyCode(至少不是我所知道的),所以我不知道如何在按下Enter键而不是调用prop的情况下使handleChange函数调用prop。add``setText

我尝试做的一件事是改为将onKeyDown处理程序附加到textarea,可以用来检测enterkeyCode(13),但这使我无法正确设置文本,因为如果我将附加到事件的keyCode转换为字符并将其附加到当前值之后,我将无法确定它是大写还是小写。

我很困在这里。我真的不认为我有办法检测更改事件上的回车键,而keyDown事件没有办法让我处理所有可能的输入。有什么办法可以将两者结合吗?

提前致谢!


阅读 220

收藏
2020-07-22

共1个答案

小编典典

您可以同时使用两个处理程序。

在onKeyDown中,您可以检查密钥。如果是ENTER键,则按通话event.preventDefault()以阻止onChange通话,否则按–不执行任何操作

在事件的change默认处理程序keydown被调用之前,Javascript事件队列不包含事件。如果你调用event.preventDefault()onKeyDown处理任何change事件将被解雇。

2020-07-22