当前位置: 首页 > 知识库问答 >
问题:

如何将单个ref与多个TextInput一起使用(react-native)

薛枫
2023-03-14

我已经学会了我可以使用参考文献来实现这一点。但是,当我将一个ref与几个TextInputs一起使用时,我只与最后一个TextInputs一起使用

class UserRegister extends React.Component<any, State> {
    private inputRef: React.RefObject<TextInput>;

    constructor(props:any) {
        super(props);
        //some code
        this.inputRef = React.createRef();
    }

    onSwitchPicker = () => {
        if (this.inputRef.current) {
            this.inputRef.current.blur();
        }

        //some code
    }

    render() {
        return (
            <KeyboardAvoidingView behavior="padding" style={styles.container}>
                <TextInput
                    ref={this.inputRef}
                    //other params
                />

                <TextInput
                    ref={this.inputRef}
                    //other params
                />

                <TouchableOpacity
                    onPress={this.onSwitchPicker}
                    //other params
                >
                //some code
                </TouchableOpacity>

                // some code
            </KeyboardAvoidingView>
        );
    }
}

共有1个答案

向锦
2023-03-14

如果至少有一个输入存在(不是有条件呈现的),那么您可以将其设置为焦点,并仅使用一个createref()模糊下一行。

onSwitchPicker = () => {
  this.specialInputRef.current.focus();
  this.specialInputRef.current.blur();
}

不确定这是否会在React Native中滚动屏幕。如果它滚动--这肯定是糟糕的用户体验--你可以有N个参考:

onSwitchPicker = () => {
  this.inputRef1.current.blur();
  this.inputRef2.current.blur();
  this.inputRef3.current.blur();
  this.inputRef4.current.blur();
}

我看到如何使其更短的唯一方法是使用引用数组:

constructor(props) {
 super(props);
 this.inputRefs = new Array(10).fill().map(() => React.createRef());
}

onSwitchPicker = () => {
  this.inputRefs.forEach(({ current }) => {
    if (current) current.blur();
  });
}

render() {
....
 <input ref={this.inputRefs[0]} ...
...
 <input ref={this.inputRefs[1]} ...
...
 <input ref={this.inputRefs[11]} ...
....
{someCondition && <input ref={this.inputRefs[4]} ...}
....
{someOtherCondition && <input ref={this.inputRefs[4]} ...}
 类似资料:
  • 如何管理处理相同数据库模式的多个项目。如果被另一个项目修改,每个项目中的Flyway迁移脚本不允许启动。 例如: 我有一个带有FlywayInitializer类的spring boot项目X。 我有一个子模块Y,还有他自己的FlywayInitializer类 项目结构: 如何对项目X和Y使用与Flyway相同的schemaname“schema1”? 编辑:谢谢@jesper\u bk对我的帮

  • 我试图在Material UI的TextField上使用React的“ref”属性访问输入数据。通过“inputRef”或“inputProps”似乎没有一种简单的方法可以做到这一点。 下面的示例显示了第26行的inputProps的使用。将TextField的名称指定给“ref”属性似乎不会生成有效的对象。 对于“inputRef”,根据Material ui文档,它强制使用函数,尝试将字段数据

  • 我已经为TextInput创建了公共类,并多次使用它,但它的事件处理方法相同。我想在TextInput中填充数据后处理数组数据。 这里添加了多个textField和单个。如何标识哪个textInput调用了。 根据数组数据动态添加的textField组件。现在,当用户编辑textInput时,我希望在特定索引上标识textInput和更新的数组文本。

  • 我想使用的与chrome API,但我遇到了一个问题... 我尝试了以下操作,但chrome API无法将识别为函数,因此我尝试先将保存为变量。。。 但是当我尝试以下操作时,仍然是一个空字符串。我不明白为什么,因为被设置为。我怎样才能解决这个问题? 编辑 我把剧本叫做... 在剧本里我有以下内容... 其中函数只返回一个字符串。它是由我的捕获的,我通过打印到if语句内的控制台来验证它。 我注意到是

  • 使用React-Native并尝试学习ES6语法。我昨天也遇到了类似的问题,并得到了解决方案。我补充说 .绑定(这个) 到我的我的函数调用和问题解决。我在另一个函数调用中再次遇到了同样的问题,我无法跟踪到底发生了什么。错误消息是相同的。

  • 问题内容: 我用来调用Firebase请求函数,并在请求完成后得到通知,以便能够处理结果。在这种情况下,我只是打印了一条语句。 这段代码工作正常。 问题 在于,在运行时,数据将被添加到Firebase数据库中。这就是为什么我必须使用而不是。 这意味着在运行时会有一个观察者,并且如果数据已添加到数据库中,则将再次调用其中的块。 一旦发生这种情况,该应用就会崩溃,因为没有调用。只要我说对了。 如果将其