【发布时间】:2019-07-26 05:46:01
【问题描述】:
这里有两部分问题:首先,任何人都可以向我解释为什么 this.state.taskName 和 this.state.taskBody 以及它们相应的输入在提交表单后没有清除吗?在 handleSubmit() 中,我使用 this.setState() 将它们的状态设置为空字符串,但它似乎不起作用。它也不会让我多次提交,我怀疑这可能与状态未清除有关。
其次,将具有多个键值对的任务推送到 this.state.tasks 数组中的最佳方法是什么?我尝试将 taskName 和 taskBody 存储为 state 中的对象,还尝试将它们推送到对象中然后显示它们,但无法使其工作。
以下是父文件、子文件和兄弟文件:
import React, { Component } from 'react';
import Task from './Task/Task';
import NewTaskForm from './NewTaskForm/NewTaskForm';
class Board extends Component {
constructor(props) {
super(props);
this.handleSubmit = this.handleSubmit.bind(this);
this.handleChange = this.handleChange.bind(this);
this.state = {
tasks: [],
taskName: '',
taskBody: ''
};
}
handleSubmit(e) {
e.preventDefault();
let updatedTasks = this.state.tasks;
let taskName = this.state.taskName;
let taskBody = this.state.taskBody;
updatedTasks.push(taskName, taskBody);
let updatedName = '';
let updatedBody = '';
this.setState({ tasks: updatedTasks, taskName: updatedName, taskBody: updatedBody });
};
handleChange(e) {
this.setState({ [e.name]: e.value });
}
render() {
return (
<div>
<NewTaskForm
onSubmit={this.handleSubmit}
onChange={this.handleChange}
/>
<Task
tasks={this.state.tasks}
/>
</div>
);
}
}
export default Board;
import React, { Component } from 'react';
class NewTaskForm extends Component {
constructor(props) {
super(props);
this.handleChange = this.handleChange.bind(this);
}
handleChange(e) {
this.props.onChange(e.target);
}
render() {
return (
<form onSubmit={this.props.onSubmit}>
<label>Task Name</label>
<input
name="taskName"
required type="text"
value={this.props.taskName}
onChange={this.handleChange}
placeholder="Enter a task name"
/>
<label>Task Body</label>
<input
name="taskBody"
required type="text"
value={this.props.taskBody}
onChange={this.handleChange}
placeholder="Enter a task body"
/>
<button
type="submit"
className="btn btn-default"
>Add Task
</button>
</form>
);
}
}
export default NewTaskForm;
import React, { Component } from 'react';
class Task extends Component {
render() {
let taskList = this.props.tasks.map((task, i) => {
return (
<li key={i}>
{task}
</li>
);
});
return (
<ul>
{taskList}
</ul>
)
}
}
export default Task;
谢谢!
【问题讨论】:
-
据我所知,
this.props.taskName和this.props.taskBody未定义,因为您没有将它们传递给<NewTaskForm>。
标签: javascript reactjs input state