Reactjs 当最大长度充满第一个输入时,在react js中将焦点从一个输入移动到另一个输入

Reactjs 当最大长度充满第一个输入时,在react js中将焦点从一个输入移动到另一个输入,reactjs,react-router,Reactjs,React Router,当第一个输入的最大长度已满时,在react js中将焦点从一个输入移动到另一个输入 <div className="col-2"> <div className="form-group"> <input type="text" className="form-control text-

当第一个输入的最大长度已满时,在react js中将焦点从一个输入移动到另一个输入

<div className="col-2">
                                            <div className="form-group">
                                                <input type="text" className="form-control text-center" maxLength={1} ref={this.vc1} returnkeytype={'next'} value={this.state.v1} onSubmitEditing={this.maxLength?1:() => this.focusNextField('2')} />
                                            </div>
                                        </div>
                                        <div className="col-2">
                                            <div className="form-group">
                                                <input type="text" className="form-control text-center" maxLength={1} ref={this.vc2} returnkeytype={'next'}  value={this.state.v2} onSubmitEditing={(event) => this.focusNextField('3')}/>
                                            </div>
                                        </div>

this.focusNextField('2')}/>
this.focusNextField('3')}/>

列表项您可以使用其ref来集中输入

myInputRef.focus()

您可以像下面这样定义
focusNextField

focusNextField = (nextField) => {
  if (nextField === '2') {
     this.v2.focus();
  } else if (nextField === '3') {
     this.v3.focus();
  }
  ...
};

您可以使用其ref来集中输入

myInputRef.focus()

您可以像下面这样定义
focusNextField

focusNextField = (nextField) => {
  if (nextField === '2') {
     this.v2.focus();
  } else if (nextField === '3') {
     this.v3.focus();
  }
  ...
};

通过使用
refs
帮助聚焦逻辑,您的想法是正确的。一种简单的方法是跟踪
ref
数组,一旦输入发生更改,您将更新与
ref
对应的当前索引。请州政府跟踪该索引

然后在状态更改时触发的
componentDidUpdate()
上,您可以识别该
ref
并检查其输入值的长度是否与其最大长度匹配。如果是这样,那么您只需将注意力集中到下一个(+1)索引处的ref

这是一个工作沙箱:

从“React”导入React;
从“react dom”导入react dom;
导入“/styles.css”;
类应用程序扩展了React.Component{
状态={
v1:“,
v2:“,
v3:“,
currentRefIndex:null
};
vc1=React.createRef();
vc2=React.createRef();
vc3=React.createRef();
onChange=(e,索引)=>{
这是我的国家({
[e.target.name]:e.target.value,
currentRefIndex:索引
});
};
componentDidUpdate(){
const refs=[this.vc1,this.vc2,this.vc3];
const{currentRefIndex}=this.state;
//获取当前的ref属性
常数currentRef=refs[currentRefIndex]。当前;
const currentRefMaxLength=currentRef.maxLength;
常数currentRefValue=currentRef.value;
如果(
currentRefValue.length==currentRefMaxLength&&
currentRefIndex<参考长度-1
) {
参考文献[currentRefIndex+1].current.focus();
}
}
render(){
返回(
this.onChange(e,0)}
/>
这个.onChange(e,1)}
/>
这个.onChange(e,2)}
/>
);
}
}
const rootElement=document.getElementById(“根”);
render(,rootElement);

通过使用
refs
帮助聚焦逻辑,您的想法是正确的。一种简单的方法是跟踪
ref
数组,一旦输入发生更改,您将更新与
ref
对应的当前索引。请州政府跟踪该索引

然后在状态更改时触发的
componentDidUpdate()
上,您可以识别该
ref
并检查其输入值的长度是否与其最大长度匹配。如果是这样,那么您只需将注意力集中到下一个(+1)索引处的ref

这是一个工作沙箱:

从“React”导入React;
从“react dom”导入react dom;
导入“/styles.css”;
类应用程序扩展了React.Component{
状态={
v1:“,
v2:“,
v3:“,
currentRefIndex:null
};
vc1=React.createRef();
vc2=React.createRef();
vc3=React.createRef();
onChange=(e,索引)=>{
这是我的国家({
[e.target.name]:e.target.value,
currentRefIndex:索引
});
};
componentDidUpdate(){
const refs=[this.vc1,this.vc2,this.vc3];
const{currentRefIndex}=this.state;
//获取当前的ref属性
常数currentRef=refs[currentRefIndex]。当前;
const currentRefMaxLength=currentRef.maxLength;
常数currentRefValue=currentRef.value;
如果(
currentRefValue.length==currentRefMaxLength&&
currentRefIndex<参考长度-1
) {
参考文献[currentRefIndex+1].current.focus();
}
}
render(){
返回(
this.onChange(e,0)}
/>
这个.onChange(e,1)}
/>
这个.onChange(e,2)}
/>
);
}
}
const rootElement=document.getElementById(“根”);
render(,rootElement);

onSubmitEditing
听起来像react native,而不是reacjs-你是说
onChange
onSubmitEditing
听起来像react native,而不是reacjs-你是说
onChange