<div id="app"></div>
const { useEffect } = React;
const { useForm } = ReactHookForm;

const App = () => {
  const {
    register,
    formState: { isLoading },
    handleSubmit
  } = useForm({
    defaultValues: async () => {
      const response = await fetch("https://api.ipify.org/?format=json");
      const data = await response.json();
      return {
        ip: data.ip
      };
    }
  });

  const onSubmit = (data) => {
    console.log(data);
  };

  return (
    <form onSubmit={handleSubmit(onSubmit)}>
      <input type="text" {...register("ip")} disabled={isLoading} /> <br />
      <br />
      {isLoading && <p>正在獲取 IP 地址...</p>}
      <button type="submit" disabled={isLoading}>
        提交
      </button>
    </form>
  );
};

ReactDOM.render(<App />, document.querySelector("#app"));
View Compiled
Run Pen

External CSS

This Pen doesn't use any external CSS resources.

External JavaScript

  1. https://cdnjs.cloudflare.com/ajax/libs/react/18.2.0/umd/react.production.min.js
  2. https://cdnjs.cloudflare.com/ajax/libs/react-dom/18.2.0/umd/react-dom.production.min.js
  3. https://unpkg.com/react-hook-form@7.45.1/dist/index.umd.js