【发布时间】:2018-10-05 19:04:57
【问题描述】:
我有一个名为ToDoLists 的父组件,它包含一个输入并允许您输入一个新的待办事项列表名称。该组件映射到组件状态中的列表数组以创建不同的List 组件。
List 组件允许您添加待办事项。
例如:包含早餐、淋浴、剃须等待办事项的晨间日程清单。
我可以获得ToDoLists 组件来创建新的List 组件。但是,当我在 List 组件状态中添加待办事项时,在父组件的输入中重新键入似乎会擦除子组件的状态。
我不确定这是否是尝试这样做的正确方法。这是因为我在添加新列表时需要传递prevState?
ToDoLists 组件
import React, { Component } from 'react';
import '../App.css';
import List from './list.js';
class ToDoLists extends Component {
constructor(props){
super(props)
this.state = {
term: '',
list: []
};
}
onChange = (event) => {
this.setState({term: event.target.value});
}
onSubmit = (event) => {
event.preventDefault()
this.setState({
term: '',
list: [...this.state.items, this.state.term]
})
}
render() {
const generateKey = (x) => {
return `${x}_${new Date().getTime()}`
};
return(
<div>
<h3>ToDo Lists Component</h3>
<form onSubmit={this.onSubmit}>
<input placeholder='Add A New List' value={this.state.term} onChange={this.onChange}/>
<button className='btn btn-sm btn-dark'>Submit</button>
</form>
<br/><br/>
{
this.state.list.map((data) => {return(<List title={data} key={generateKey(data)}/>)})
}
</div>
)
}
}
export default ToDoLists
列表组件
import React, { Component } from 'react';
import '../App.css';
class List extends Component {
constructor(props){
super(props)
this.state = {
term: '',
items: []
};
this.onChange = this.onChange.bind(this);
}
onChange = (event) => {
this.setState({term: event.target.value});
}
onSubmit = (event) => {
event.preventDefault()
this.setState({
term: '',
items: [...this.state.items, this.state.term]
})
}
render() {
const generateKey = (x) => {
return `${x}_${new Date().getTime()}`
}
return(
<div>
<h3>{this.props.title}</h3>
<form onSubmit={this.onSubmit}>
<input placeholder='Add New Todo Item' value={this.state.term} onChange={this.onChange}/>
<button className='btn btn-sm btn-dark'>Submit</button>
</form>
<ul>
{
this.state.items.map((item) => {return(<li key={generateKey(item)}>{item}</li>)})
}
</ul>
</div>
)
}
}
export default List
【问题讨论】:
标签: javascript reactjs