我正在一个简单的待办事项App上练习,用户可以在字段中键入他们的待办事项,然后点击提交以将其添加到待办事项列表中。
一旦表格提交了' this.setState({newTodo:''})'我就设法清除了州。 (再次点击提交表示将添加一个空的待办事项);
但是,输入字段中的文本不会被清除。
const TodoItem = ({ text }) => <li>{text}</li>;
class App extends Component {
constructor(props) {
super(props);
this.state = {
todos: ['walk dog', 'feed cat'],
newTodo: ''
};
this.handleSubmit = this.handleSubmit.bind(this);
}
handleSubmit(e) {
e.preventDefault();
const todos = [...this.state.todos, this.state.newTodo];
this.setState({ todos, newTodo: '' });
}
render() {
const { newTodo } = this.state;
const todos = this.state.todos.map((todo, index) => <TodoItem key={index} text={todo} />);
return (
<div className="App">
<form onSubmit={this.handleSubmit}>
<h1>Simple Todo App</h1>
<input
type="text"
name="newTodo"
value={this.newTodo}
onChange={e => this.setState({ [e.target.name]: e.target.value })}
/>
<ol>
{todos}
</ol>
<button>SAVE</button>
</form>
</div>
);
}
}
export default App;
感谢您提供任何帮助。
答案 0 :(得分:2)
e.cancel
未定义,使用this.newTodo
代替this.state.newTodo
:
this.newTodo
OR:
<input
type="text"
name="newTodo"
value={this.state.newTodo}
onChange={e => this.setState({ [e.target.name]: e.target.value })}
/>
答案 1 :(得分:0)
你看到添加空newTodo的原因是因为你的newTodo初始状态是空的,而在handleSubmit中你总是传递它而不管它是否为空。所以在handleSubmit中检查newTodo状态,然后将newTodo添加到todos数组。
if(this.state.newTodo != “”){
const todos = [...this.state.todos, this.state.newTodo];
}
并将输入字段值属性值更改为newTodo
<input value={newTodo} />
不要使用this.newTodo
答案 2 :(得分:0)
在以下部分中:
<input
type="text"
name="newTodo"
value={this.newTodo}
onChange={e => this.setState({ [e.target.name]: e.target.value })}
/>
将value={this.newTodo}
更改为value={this.state.newTodo}