reactjs - 为什么我的待办事项列表应用程序中的输入文本为空?
问题描述
我正在构建一个待办事项列表反应应用程序,当我在输入文本字段中写一些内容时,输入文本的值未显示在列表中。它只显示一个没有任何文字。有人可以帮助我吗?
Form.jsx - 我在哪里获得输入文本的值
import React from 'react';
const Form = ({setInputText, setTodos, todos, inputtText}) => {
const inputTextHandler = (event) => {
setInputText(event.target.value)
}
const submitTodoHandler = (event) => {
event.preventDefault();
setTodos([
...todos, {text: inputtText, completed: false, id: Math.random() * 1000},
])
setInputText("");
};
return (
<form>
<input value={inputtText} type="text" className="todo-input" onChange={inputTextHandler} />
<button className="todo-button" type="submit" onClick={submitTodoHandler}>
<i className="fas fa-plus-square"></i>
</button>
<div className="select">
<select name="todos" className="filter-todo">
<option value="all">All</option>
<option value="completed">Completed</option>
<option value="uncompleted">Uncompleted</option>
</select>
</div>
</form>
)
}
export default Form;
TodoList.jsx - 我显示所有
import React from "react";
import Todo from "./Todo";
const TodoList = ({ todos, setTodos }) => {
return (
<div className="todo-container">
<ul className="todo-list">
{todos.map((todo) => (
<Todo
text={todo.text}
todos={todos}
setTodos={setTodos}
key={todo.id}
todo={todo} // para ter aceso à cada elemento primeiro
/>
))}
</ul>
</div>
);
};
export default TodoList;
待办事项.jsx
import React from 'react';
const Todo = ({text, setTodos, todos, todo}) => {
const deleteHandler = () => {
setTodos(todos.filter(el => el.id !== todo.id))
};
return (
<div className="todo">
<li className="todo-item">{text}</li>
<button className="complete-btn"><i className="fas fa-check"></i></button>
<button onClick={deleteHandler} className="trash-btn"><i className="fas fa-trash"></i></button>
</div>
);
};
export default Todo;
解决方案
我认为您错过了一些用于呈现记录的代码
代码应如下所示
表单.jsx:
submitTodoHandler() {
const userInput = {
text: inputtText,
// Add a random id which is used to delete
// Add a user value to list
completed : false ,
id : Math.random() * 1000
};
// Update list
const list = [...this.state.todos];
list.push(userInput);
// reset state
this.setState({
list
});
}
TodoList.jsx:
{this.state.todos.map((todo) => (
<Todo
text={todo.text}
status={todo.completed}
key={todo.id}
todo={todo}
/>
))}
你可以在这里看到一个简单的例子
希望上面的例子对你有帮助
推荐阅读
- ansible - Ansible 中的用户升级
- android - Android:错误:必须实现 OnFragmentInteractionListener
- scipy - 牛顿法在迭代后不收敛(Python - scipy)
- android - 无法使用 cordova-plugin-facebook4 和 phonegap-plugin-barcodescanner 构建 cordova 应用程序
- java - Launch4J 创建 exe 文件导致 VirusTotal 误报?
- javascript - JS Array.indexOf 返回错误的值
- typo3 - TYPO3:为特定站点激活的扩展程序
- java - “变量”无法解析为变量
- python - 正则表达式:匹配除 unicode 字母之外的所有内容
- python - 我们可以在 python 的 os.system() 中使用 \ 作为转义序列吗