这是我的loginButton,它是另一个文件中Button组件的包装.

'use client';

import { useRouter } from 'next/navigation';
import { useTransition } from 'react';

interface LoginButtonProps {
  children: React.ReactNode;
  mode?: 'modal' | 'redirect';
  asChild?: boolean;
}

export const LoginButton = ({
  children,
  mode = 'redirect',
  asChild,
}: LoginButtonProps) => {
  const router = useRouter();
  const [isPending, startTransition] = useTransition();

  const onclickHandler = () => {
    router.push('/auth/login');
    console.log('clicked');
  };

  return (
    <span className="cursor-pointer" onClick={onclickHandler}>
      {children}
    </span>
  );
};

Button个组成部分是:

import { Button } from '@/components/ui/button';
import { LoginButton } from '@/components/auth/login-button';

export default function Home() {
  return (
    <main>
        <LoginButton>
          <Button variant="secondary" size="lg" className="mt-8">
            Sign in
          </Button>
        </LoginButton>
      </div>
    </main>
  );
}

我想传递isPending状态作为prop和使用在Home组件.我想保持按钮禁用,而isPending是真的,以及更改其文本.如何做到这一点?

请帮助我用你宝贵的时间和知识.先谢谢你.

推荐答案

您可以try 将fallback组件传递给LoginButton,而transition挂起时将呈现该组件.

Login Button:

export const LoginButton = ({
  children,
  mode = 'redirect',
  asChild,
  fallback
}: LoginButtonProps) => {
  const router = useRouter();
  const [isPending, startTransition] = useTransition();

  const onclickHandler = () => {
    router.push('/auth/login');
    console.log('clicked');
  };

  return (
    <span className="cursor-pointer" onClick={onclickHandler}>
      {isPending ? fallback : children}
    </span>
  );
};

Fallback Component:

function LoadingBtn() {
 return (
   <Button variant="secondary" size="lg" className="mt-8" disabled>
      Loading
   </Button>
 )
}

Implementation:

<LoginButton fallback={<LoadingBtn />}>
          <Button variant="secondary" size="lg" className="mt-8">
            Sign in
          </Button>
</LoginButton>

Typescript相关问答推荐

Tailwind CSS样式不在Svelte应用程序中呈现

相同端点具有不同响应时的RTKQuery类型定义

用泛型类型覆盖父类函数导致类型y中的Property x不能赋给基类型Parent中的相同属性."'''''' "

泛型类型联合将参数转换为Never

如何编写一个类型脚本函数,将一个对象映射(转换)为另一个对象并推断返回类型?

使用TypeScrip根据(可选)属性推断结果类型

在包含泛型的类型脚本中引用递归类型A<;-&B

ANGLING v17 CLI默认设置为独立:延迟加载是否仍需要@NgModule进行路由?

Angular:ngx-echart 5.2.2与Angular 9集成错误:NG 8002:无法绑定到选项,因为它不是div的已知属性'

如何将别名添加到vitest配置文件?

如何使这种一对一关系在旧表上起作用?

如何将类似数组的对象(字符串::匹配结果)转换为类型脚本中的数组?

如何在不违反挂钩规则的情况下动态更改显示内容(带有状态)?

为什么在泛型方法中解析此promise 时会出现类型错误?

在抽象类构造函数中获取子类型

使用&reaction测试库&如何使用提供程序包装我的所有测试组件

在tabel管理区域react js上设置特定顺序

确保财产存在

传入类型参数<;T>;变容函数

React router - 如何处理嵌套路由?