我目前正在使用react-final-form创建一个表单,并试图通过集成作为适配器使用react-phone-number-input,就像通过这个例子显示的那样。
我试图使用这个示例来了解它是如何完成的,但我不确定如何访问组件并正确地为其创建适配器。
import React from 'react';
import { Form, Field } from 'react-final-form';
import PhoneInput from 'react-phone-number-input';
const sleep = ms => new Promise(resolve => setTimeout(resolve, ms))
const onSubmit = async values => {
await sleep(300)
window.alert(JSON.stringify(values, 0, 2))
}
const PhoneAdapter = ({ input, meta, ...rest }) => (
<PhoneInput
{...input}
{...rest}
value={input.value}
onChange={(event, value) => input.onChange(value)}
/>
)
class ContactForm extends React.Component {
render() {
return (
<>
<Form
onSubmit={onSubmit}
initialValues={{ }}
render={({ handleSubmit, form, submitting, pristine, values }) => (
<form onSubmit={handleSubmit}>
<fieldset>
<Field component={PhoneAdapter} />
</fieldset>
<fieldset>
<button type="submit" disabled={submitting || pristine}>
Submit
</button>
</fieldset>
<pre>{JSON.stringify(values, 0, 2)}</pre>
</form>
)}
/>
</>
);
}
}
export default ContactForm;发布于 2019-04-15 11:37:40
最新情况:2019年7月
显然,您所需要做的就是扩展字段的输入属性。效果完美无瑕。学习传播,如果你不熟悉它。
const PhoneAdapter = ({ input }) => (
<PhoneInput {...input} />
)
<Field name="phone" placeholder="Enter phone number" component={PhoneAdapter} />最后,我用FieldRenderProps道具做了实验,直到它成功。我不太确定它是否能工作,因为react-phone-number-input是组件中的两个元素。我以为它只会在其中一个元素上实现输入。
通过使用input,我可以访问输入的道具。因此,我调用了它的值,因为默认值如下所示:
<PhoneInput
placeholder="Enter phone number"
value={ this.state.value } // This is what I called.
onChange={ value => this.setState({ value }) }/>然后,我对onChange函数支柱也做了同样的操作。
const PhoneAdapter = ({ input }) => (
<PhoneInput value={input.value.value} onChange={value => input.onChange(value)} />
)最后,我使用了如下组件适配器:
<Field name="phone" placeholder="Enter phone number" component={PhoneAdapter} />https://stackoverflow.com/questions/55687357
复制相似问题