Skip to content

Instantly share code, notes, and snippets.

@mcmxc
Created January 8, 2020 12:21
Show Gist options
  • Save mcmxc/c43d9a2967e56fde5b76332fdc1fa83d to your computer and use it in GitHub Desktop.
Save mcmxc/c43d9a2967e56fde5b76332fdc1fa83d to your computer and use it in GitHub Desktop.
react-phone-number-input + ant design (antd) Input
import React, { useState, useCallback, forwardRef } from 'react';
import { Input } from 'antd';
import PhoneInput from 'react-phone-number-input/min';
import 'react-phone-number-input/style.css';
const PhoneInputComponent = forwardRef(({ onChange, ...props }, ref) => {
const handleChange = useCallback(e => onChange(e.target.value), [onChange]);
return <Input ref={ref} {...props} onChange={handleChange} />;
});
const App = () => {
const [phoneNumber, setPhoneNumber] = useState();
return (
<div className="app">
<PhoneInput
value={phoneNumber}
onChange={setPhoneNumber}
inputComponent={PhoneInputComponent}
/>
</div>
);
};
export default App;
@Darian-Certn
Copy link

Any solution you guys know of with v4?

@c01nd01r
Copy link

c01nd01r commented May 4, 2021

We can extract the original input element from <Input /> instance.
Example with imask.js:
uNmAnNeR/imaskjs#163 (comment)

@mcmxc
Copy link
Author

mcmxc commented May 5, 2021

just checked, this peace of code still works with v4

@ovchinnikov
Copy link

doesn't work with the latest Antd https://stackblitz.com/edit/react-dg4xxp

@simon-marcus
Copy link

Any luck getting this to work? I've been unsuccessful: ant-design/ant-design#49312 (comment)

@mcmxc
Copy link
Author

mcmxc commented Oct 5, 2024

I'll update this later today or tomorrow, this approach is outdated

@mcmxc
Copy link
Author

mcmxc commented Oct 5, 2024

react + react-dom - 18.3.1
antd - 5.20.4
react-phone-number-input - 3.4.8

import PhoneInput from 'react-phone-number-input';
import { forwardRef,  useImperativeHandle, useRef } from 'react';

const MyInput = forwardRef((props, ref) => {
  const inputRef = useRef(null);

  useImperativeHandle(ref, () => inputRef.current.input, []);

  return <Input placeholder={'(201) 555-0123'} {...props} ref={inputRef} />;
});

const PhoneNumberInput = () => {
  const [value, setValue] = useState('')
  return (
   <PhoneInput
       onChange={setValue}
       value={value}
       inputComponent={MyInput}
       // ...props
    />
  )
}

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment