【发布时间】:2020-10-29 10:38:08
【问题描述】:
我正在将纯 js 文件转换为 React 应用程序中的打字稿。
document 在我使用 document.getElementById("login-username") 等方法时显示错误
如何在这个打字稿文档中引用document 方法?
import React, { useState, FormEvent, ChangeEvent } from 'react';
interface loginProps {
username: string,
setUsername(username: string): string,
setLoggedIn(loggedIn: boolean): boolean
}
export default function Login(props: loginProps) {
const { username, setUsername, setLoggedIn } = props;
const [err, setErr] = useState('');
function handleUsername(e: FormEvent<HTMLFormElement> ) {
const user = document.getElementById("login-username").value.trim();
const password = document.getElementById("login-password").value.trim();
if (user === '') { setErr('blank username'); } else { //ugly, will fix later
if (password === '') { setErr('blank password'); } else {
if (user.length < 2) { setErr('username must be at least 2 characters'); } else {
setUsername(user);
setLoggedIn(true);
}
}
}
e.preventDefault();
}
function setUserField(e: ChangeEvent<HTMLInputElement>) {
setUsername(e.target.value);
e.preventDefault();
}
return (
<form onSubmit={handleUsername} autoComplete="yes" style={{ padding: "10px" }}>
<span style={{ fontWeight: 'bold' }}>Login</span>
<br /><br />
<label htmlFor="login-username">Username:</label>
<input type="text"
padding="20px"
value={username}
onChange={setUserField}
name="login-username"
id="login-username" />
<label htmlFor="login-password">Password:</label>
...
【问题讨论】:
-
不要使用 DOM。用 React 的方式来做。 reactjs.org/docs/forms.html
-
您看到的错误是什么?因为您应该可以毫无问题地使用
document对象:typescriptlang.org/play/… 但实际上,您应该在这里使用 refs。
标签: javascript reactjs typescript jsx