javascript - TypeScript 中的 useParams 不允许解构

标签 javascript reactjs typescript react-router destructuring

我在关注 this video ("JWTUser Sessions with ReactJS & GraphQL...") when at this time这家伙破坏了useParams()方法来自 react-router-dom图书馆。
就我而言,这不起作用,因为我收到此错误:

这是此时的整个代码:

import React, { useState, useContext } from 'react';
import { useParams, useHistory } from 'react-router-dom';
import { useConfirmMutation } from '../gql/generated/graphql';
import { AppStateContext } from './provider';

export const Confirm: React.FC = () => {
    const history = useHistory();
    const { appSetAuthToken, appClearAuthToken, gqlError } = useContext(AppStateContext);

    const [show, setShow] = useState(false);
    const [email, setEmail] = useState('');
    const [confirm] = useConfirmMutation();
    const { token } = useParams();

    const handleFormSubmit = async (e: React.FormEvent) => {
        e.preventDefault();

        try {
            setShow(false);
            appSetAuthToken(token);
            const { data } = await confirm({ variables: email });
        } catch {

        }
    };

    if (token === undefined || token === '')
        return <div>Enlace de confirmación de usuario inválido</div>;

    return (
        <div>
            <div>Página de confirmación de usuario</div>
            {show ? <div>{gqlError.msg}</div> : undefined}
            <form>
                <div>
                    <input
                        value={email}
                        placeholder='Correo electrónico'
                        type='email'
                        onChange={e => { setEmail(e.target.value); }}
                    />
                </div>
                <button type='submit'>Confirmar</button>
            </form>
        </div>
    );
};
我也在 CodeSandbox 上尝试过相同的操作但它有效。不确定,我的错误在哪里。你能看出那个错误吗?

最佳答案

useParams是通用的。您需要通过像这样指定泛型的值来告诉 typescript 您正在使用哪些参数:useParams<MyParams>() ;在您的情况下,它是:

const { token } = useParams<{token?: string}>();
其中说tokenstringundefined .

关于javascript - TypeScript 中的 useParams 不允许解构,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64517983/

相关文章:

reactjs - 蓝色按钮而不是紫色按钮

css - 如果禁用悬停路由器按钮时禁用指针事件

Angular——理解英雄游的handleError函数

javascript - Angular 将 URL 参数发送到 Web 服务

javascript - 如何在另一个函数中使用来自ajax的回调函数

JavaScript函数参数传递数组

javascript - IE9 不允许在按钮标签内输入

javascript - 为什么 .then() 没有返回 JavaScript 获取所需的值?

javascript - 使用 JavaScript 获取 URL 的特定部分

typescript - 如何在 TypeScript 中正确更改变量的类型?