Всё правильно, хуки можно использовать непосредственно внутри функциональных компонентов. В данном примере хук вызывается не в самом компоненте, а внутри метода init. Чтобы исправить, можно в самом компоненте вызывать хук useForm и дальше в качестве аргументов конструктора передавать register и handleSubmit.
class LoginForm {
  public login: any; // по хорошему перенести сюда всю логику определения поля с валидацией
  public password: any; // по хорошему перенести сюда всю логику определения поля с валидацией
  public handleSubmit: any;
  constructor(form) {
    this.init(form);
  }
  init = (form) => {
    this.login = form.register("login");
    this.password = form.register("password", { required: true, minLength: 2 });
    this.handleSubmit = form.handleSubmit(this.#onSubmit);
  };
  #onSubmit = async (data: any) => {
    const api = useContext(ApiContext).authApi; // ERROR
    const userService = useContext(UserContext);
    let navigate = useNavigate();
    try {
      const usr = await api.login(data);
      console.log(usr);
      userService.User = new UserModel(usr);
      navigate("/");
    } catch (Exception) {
      alert("не подходит");
    }
  };
}
function LoginComponent() {
  const form = useForm();
  const loginForm = new LoginForm(form);
  return (
    <div className="col-md-offset-3 col-md-6">
      <form className="form-horizontal" onSubmit={loginForm.handleSubmit}>
        <h4>Use a local account to log in.</h4>
        <hr />
        <div className="form-group row">
          <label className="col-md-2 control-label" htmlFor="login">
            Login, Email or Phone
          </label>
          {
            <div className="col-md-10">
              <input className="form-control" {...loginForm.login} />
            </div>
          }
        </div>
        <div className="form-group row">
          <label className="col-md-2 control-label" htmlFor="password">
            Password
          </label>
          {
            <div className="col-md-10">
              <input className="form-control" {...loginForm.password} />
            </div>
          }
        </div>
        <div className="form-group row">
          <div className="col-md-offset-2 col-md-10">
            <button className="btn btn-primary">Log in</button>
          </div>
        </div>
      </form>
    </div>
  );
}
export default LoginComponent;