【发布时间】:2021-04-03 17:43:31
【问题描述】:
我正在制作一个带有 react 的待办事项列表应用程序,当您输入一个输入然后单击按钮创建一个新的 todoItem 对象时,我遇到了这种错误,它显示一个空对象,然后将该输入保存在 todoList 对象中生产代码中的变量,然后 第一个 todo 元素出现 在 UI 中 第二次点击,在 第三次点击 出现 第二次 todoItem、第四次点击第三个元素等等...我不知道为什么会这样,我想解决这个问题,这是我的代码:
----------APP COMPONENT-------
import React, { useState } from "react";
import Form from "./Form";
import List from "./List";
function App() {
const [input, setInput] = useState("");
const [todoItem, setTodoItem] = useState({});
const [todoList, setTodoList] = useState([]);
const addTodoItem = (e) => {
e.preventDefault();
input && setTodoItem({ content: input, id: Math.random() * 1000 });
setTodoList([...todoList, todoItem]);
setInput("");
};
return (
<div>
<Form input={input} addTodoItem={addTodoItem} setInput={setInput} />
<List todoList={todoList} setTodoList={setTodoList} />
</div>
);
}
export default App;
---------FORM COMPONENT-----------
import React from "react";
function Form({ input, setInput, addTodoItem }) {
return (
<div>
<form action="">
<label>todos</label>
<input
value={input}
onChange={(e) => setInput(e.target.value)}
placeholder="what needs to be done"
type="text"
/>
<button onClick={addTodoItem}>set todo</button>
</form>
</div>
);
}
export default Form;
----------LIST COMPONENT-----------
import React, { useState } from "react";
function List({ setTodoList, todoList }) {
const [completed, setCompleted] = useState(false);
const deleteItem = (del) => {
todoList?.map((item, i, arr) => {
setTodoList(arr.filter((value) => value.id != del));
console.log("item>>>", item, "index>>>>", i, "array>>>>", arr);
});
};
const reverseCompleted = () =>
completed ? setCompleted(false) : setCompleted(true);
return (
<div>
<div>
{todoList.map((item, i) => (
<div key={i}>
<p>{item.content}</p>
<button onClick={() => deleteItem(item.id)}>Delete</button>
<button onClick={reverseCompleted}>
{completed ? "unCompleted" : "Completed"}
</button>
</div>
))}
</div>
</div>
);
}
export default List;
【问题讨论】:
标签: javascript reactjs object input rendering