Mar*_*mal 5 javascript destructuring typescript reactjs react-router
我正在关注这个视频(“JWTUser Sessions with ReactJS & GraphQL...”),当时这个家伙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>
);
};
Run Code Online (Sandbox Code Playgroud)
我也在CodeSandbox上尝试过同样的方法,但它有效。不确定,我的错误在哪里。你能看出那个错误吗?
Lin*_*ste 25
useParams
是通用的。你需要告诉它打字原稿PARAMS您使用的是由指定的通用这样的值:useParams<MyParams>()
; 在你的情况下是:
const { token } = useParams<{token?: string}>();
Run Code Online (Sandbox Code Playgroud)
这说明token
要么是 astring
要么undefined
。
归档时间: |
|
查看次数: |
3791 次 |
最近记录: |