菜鸟 - 反应打字稿待办事项
noob - react typescript todo
你能帮我解决一个简单的问题吗?我一直在用 React 编程,但我一直在使用纯 js。最近尝试过渡到 TS,我讨厌它的每一点,但试图理解所有这些炒作。你能给我一个使用我写的代码的 typescript 的良好用法的例子吗?这是一个简单的待办事项列表,但包含我遇到的所有问题 - 在 JS 中它会起作用!
只要告诉我它应该如何完成,我会在弄清楚它背后的正确逻辑后尝试编写真正的应用程序。
const NoteApp = () => {
const [notes, setNotes] = useState<Array<string>>()
const [title, setTitle] = useState<string>('')
const [body, setBody] = useState<string>('')
const addNote = (e:any) => {
e.preventDefault()
setNotes([
...notes,
{ title, body }
])
setTitle('')
setBody('')
}
const removeNote = (title:any) => {
setNotes(notes.filter((note) => note.title !== title))
}
return (
<div>
<h1>Notes</h1>
{notes.map((note) => (
<div key={note.title}>
<h3>{note.title}</h3>
<p>{note.body}</p>
<button onClick={() => removeNote(note.title)}>x</button>
</div>
))}
<p>Add note</p>
<form onSubmit={addNote}>
<input value={title} onChange={(e) => setTitle(e.target.value)} />
<textarea value={body} onChange={(e) => setBody(e.target.value)}></textarea>
<button>add note</button>
</form>
</div>
)
}
Typescript 只是一个工具,可以让你的代码更可重用,错误更少。
它为您提供了确保约 90% 的未定义错误消失的方法。
在这种情况下,您可以像这样声明音符的形状
type Note = {
title: string;
body: string;
};
const NoteApp = () => {
const [notes, setNotes] = useState<Array<Note>>([]);
const [title, setTitle] = useState<string>('');
const [body, setBody] = useState<string>('');
const addNote = (e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault();
setNotes([...notes, { title, body }]);
setTitle('');
setBody('');
};
const removeNote = (title: string) => {
setNotes(notes.filter((note) => note.title !== title));
};
const onTileChange = (e: React.ChangeEvent<HTMLInputElement>) => setTitle(e.target.value);
const onBodyChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => setBody(e.target.value);
return (
<div>
<h1>Notes</h1>
{notes.map((note) => (
<div key={note.title}>
<h3>{note.title}</h3>
<p>{note.body}</p>
<button onClick={() => removeNote(note.title)}>x</button>
</div>
))}
<p>Add note</p>
<form onSubmit={addNote}>
<input value={title} onChange={onTileChange} />
<textarea value={body} onChange={onBodyChange} />
<button type="submit">add note</button>
</form>
</div>
);
};
你能帮我解决一个简单的问题吗?我一直在用 React 编程,但我一直在使用纯 js。最近尝试过渡到 TS,我讨厌它的每一点,但试图理解所有这些炒作。你能给我一个使用我写的代码的 typescript 的良好用法的例子吗?这是一个简单的待办事项列表,但包含我遇到的所有问题 - 在 JS 中它会起作用!
只要告诉我它应该如何完成,我会在弄清楚它背后的正确逻辑后尝试编写真正的应用程序。
const NoteApp = () => {
const [notes, setNotes] = useState<Array<string>>()
const [title, setTitle] = useState<string>('')
const [body, setBody] = useState<string>('')
const addNote = (e:any) => {
e.preventDefault()
setNotes([
...notes,
{ title, body }
])
setTitle('')
setBody('')
}
const removeNote = (title:any) => {
setNotes(notes.filter((note) => note.title !== title))
}
return (
<div>
<h1>Notes</h1>
{notes.map((note) => (
<div key={note.title}>
<h3>{note.title}</h3>
<p>{note.body}</p>
<button onClick={() => removeNote(note.title)}>x</button>
</div>
))}
<p>Add note</p>
<form onSubmit={addNote}>
<input value={title} onChange={(e) => setTitle(e.target.value)} />
<textarea value={body} onChange={(e) => setBody(e.target.value)}></textarea>
<button>add note</button>
</form>
</div>
)
}
Typescript 只是一个工具,可以让你的代码更可重用,错误更少。 它为您提供了确保约 90% 的未定义错误消失的方法。 在这种情况下,您可以像这样声明音符的形状
type Note = {
title: string;
body: string;
};
const NoteApp = () => {
const [notes, setNotes] = useState<Array<Note>>([]);
const [title, setTitle] = useState<string>('');
const [body, setBody] = useState<string>('');
const addNote = (e: React.FormEvent<HTMLFormElement>) => {
e.preventDefault();
setNotes([...notes, { title, body }]);
setTitle('');
setBody('');
};
const removeNote = (title: string) => {
setNotes(notes.filter((note) => note.title !== title));
};
const onTileChange = (e: React.ChangeEvent<HTMLInputElement>) => setTitle(e.target.value);
const onBodyChange = (e: React.ChangeEvent<HTMLTextAreaElement>) => setBody(e.target.value);
return (
<div>
<h1>Notes</h1>
{notes.map((note) => (
<div key={note.title}>
<h3>{note.title}</h3>
<p>{note.body}</p>
<button onClick={() => removeNote(note.title)}>x</button>
</div>
))}
<p>Add note</p>
<form onSubmit={addNote}>
<input value={title} onChange={onTileChange} />
<textarea value={body} onChange={onBodyChange} />
<button type="submit">add note</button>
</form>
</div>
);
};