handleSubmit 功能在 React 的功能组件中不起作用
handleSubmit functional is not working in functional component of React
我正在尝试将待办事项应用程序的 class 组件转换为功能组件。一切顺利,但是当我提交表单时,出现空白屏幕。我认为 handleSubmit 函数中存在一些问题。请帮忙。
import React, {useState} from "react";
export const TodoFunc = (props: Props) => {
const [items, setItems] = useState([])
const [text, setText] = useState('')
const handleChange = (e) => {
setText(e.target.value)
}
const handleSubmit = (e) => {
e.preventDefault()
if (text.length === 0) {
return;
}
const newItems = {text: {text}, id: Date.now()}
setItems(() => (items.concat(newItems)))
setText('')
}
return (
<div>
<h3>TODO</h3>
<TodoList items = {items} />
<form onSubmit={handleSubmit}>
<label htmlFor="new-todo">
What do you want to do?
</label>
<input type="text"
id='new-todo'
onChange={handleChange}
value={text}
/>
<button>
Add #{items.length + 1}
</button>
</form>
</div>
);
};
const TodoList = (props) => {
return (
<ul>
{props.items.map(item => <li key={item.id}>{item.text}</li>)}
</ul>
)
}
您的问题出在下面一行:
const newItems = {text: {text}, id: Date.now()}
在这里,您将一个对象分配给文本键,而不仅仅是变量文本的值。
这就是为什么当您在 TodoList 组件中循环遍历它们时,您无法显示它们中的任何一个。
我正在尝试将待办事项应用程序的 class 组件转换为功能组件。一切顺利,但是当我提交表单时,出现空白屏幕。我认为 handleSubmit 函数中存在一些问题。请帮忙。
import React, {useState} from "react";
export const TodoFunc = (props: Props) => {
const [items, setItems] = useState([])
const [text, setText] = useState('')
const handleChange = (e) => {
setText(e.target.value)
}
const handleSubmit = (e) => {
e.preventDefault()
if (text.length === 0) {
return;
}
const newItems = {text: {text}, id: Date.now()}
setItems(() => (items.concat(newItems)))
setText('')
}
return (
<div>
<h3>TODO</h3>
<TodoList items = {items} />
<form onSubmit={handleSubmit}>
<label htmlFor="new-todo">
What do you want to do?
</label>
<input type="text"
id='new-todo'
onChange={handleChange}
value={text}
/>
<button>
Add #{items.length + 1}
</button>
</form>
</div>
);
};
const TodoList = (props) => {
return (
<ul>
{props.items.map(item => <li key={item.id}>{item.text}</li>)}
</ul>
)
}
您的问题出在下面一行:
const newItems = {text: {text}, id: Date.now()}
在这里,您将一个对象分配给文本键,而不仅仅是变量文本的值。
这就是为什么当您在 TodoList 组件中循环遍历它们时,您无法显示它们中的任何一个。