我想定义一个HOC(高阶组件),它将负责处理功能。 从'react'导入React,{组件};
const NextFieldOnEnter = WrappedContainer =>
class extends Component {
componentDidMount() {
console.log('hoc', this.refs);
//move to next input field
}
render() {
return <WrappedContainer {...this.props} />;
}
};
export default NextFieldOnEnter;
它表示 this.refs已过时。因此,当按下 enter 键时,如何实现类似于 tab 的行为。 我的表格是
<Form>
<Field
withRef
hasFeedback
name="name"
ref={ref => {
this.field1 = ref;
}}
refField = "field1"
component={makeField}
type="date"
/>
<Field
withRef
hasFeedback
name="address"
ref={ref => {
this.field2 = ref;
}}
refField ="field2"
component={makeField}
type="date"
/>
</Form>
// makefield
render() {
const {type, input, label, ref, refField, ...rest} = this.props;
return (
<Form.Item
label={label}
colon={false}
type={type}
value={value}
ref={ref}
>
<Input {...props} />
</Form.Item>
);
}
答案 0 :(得分:0)
在您的构造方法中,像这样定义您的引用
constructor(props) {
super(props);
this.field1 = React.createRef();
this.field2 = React.createRef();
}
在使用ref
的渲染器中执行此操作。
<Field
withRef
hasFeedback
name="name"
ref={this.field1} // Proper way to assign ref in react ver 16.4
refField = "field1"
component={makeField}
type="date"
/>
答案 1 :(得分:0)
您可以使用callback ref funtion创建一组可在字段之间循环使用的引用数组。它将在16.2和更高版本上使用。
准备就绪时显示解决方案;)
答案 2 :(得分:0)
这是我解决此问题的方法:
“我的表格”包含字段组件:
当 expirationDate 字段处于活动状态并且用户按下下一个键时,焦点将转到下一个名为 securityCode 的字段。另外,当 securityCode 处于活动状态并且用户按下下一步按钮时,我们提交了表单(因为这是表单的最后一个字段)。这就是为什么此字段定义了 onSubmitEditing 道具的原因。
<Form>
<Field
name={'expirationDate'}
component={renderInputRef}
withRef
forwardRef
ref={componentRef => (this.expirationDate = componentRef)}
refField="expirationDate"
onEnter={() => {
try {
this.cvc.getRenderedComponent().refs.cvc._root.focus();
} catch {
/*Do nothing */
}
}}
onChange={(event, newValue) => {
try {
if (newValue?.length == 5) {
this.cvc.getRenderedComponent().refs.cvc._root.focus();
}
} catch {
/*Do nothing */
}
}}
/>
<Field
name={'securityCode'}
component={renderInputRef}
onSubmitEditing={!invalid ? handleSubmit(this.submit) : null}
accessibilityLabel={'new-card-cvc'}
keyboardType={'number-pad'}
withRef
forwardRef
refField="cvc"
ref={componentRef => (this.cvc = componentRef)}
/>
</Form>
和 renderInputRef 组件:(在该项目中,我们使用基于本机的数据库,但是没有它几乎是相同的。)
export class renderInputRef extends PureComponent<Props> {
render() {
const {
input,
onEnter,
refField,
display,
description,
iconRight,
meta: { touched, warning },
...custom
} = this.props;
var hasError = touched && (error !== undefined || warning !== undefined);
return (
<React.Fragment>
<Item
withRef
forwardRef
>
<Input
ref={refField}
returnKeyType={'next'}
onSubmitEditing={onEnter}
{...input}
{...custom}
/>
</Item>
</React.Fragment>
);
}
}