Чего вам не хватает, так это значения и onChange реквизита на вашем входе. Значение входа контролируется государством. Это рабочий пример, который даст вам результат, который вы ищете:
class Contacts extends Component {
constructor(props) {
super(props)
this.state = {
items: []
}
this.addContact = this.addContact.bind(this)
this.deleteItem = this.deleteItem.bind(this)
}
addContact(e) {
//e.preventDefault should always be the first thing in the function
e.preventDefault()
//use state to access form values
var newItem = {
firstname: this.state.firstname,
lastname: this.state.lastname,
phone: this.state.phone,
key: Date.now()
}
//add newItem to items
let holder = this.state.items
holder.push(newItem)
this.setState({items: holder})
//reset form to blank values
this.setState({ firstname: '', lastName: '', phone: '' })
console.log(this.state.items)
}
deleteItem(key) {
var filteredItems = this.state.items.filter(function(item) {
return item.key !== key
})
this.setState({
items: filteredItems
})
}
//arrow functions automatically bind to this
handleChange = e => {
//destructuring to get the variables
let { name, value } = e.target
//setting state whith the value of "name" as the key
this.setState({ [name]: value })
}
render() {
return (
<Tabs onChange={this.onChange} defaultSelectedIndex={0} justified={true}>
<Tab value="pane-1" label="Add Contact" onActive={this.onActive}>
<Panel>
<Form onSubmit={this.addContact}>
<Input
value={this.state.firstname}
name="firstname"
onChange={this.handleChange}
label="First Name"
required={true}
floatingLabel={true}
/>
<Input
value={this.state.lastname}
name="lastname"
onChange={this.handleChange}
label="Last Name"
required={true}
floatingLabel={true}
/>
<Input
value={this.state.phone}
name="phone"
onChange={this.handleChange}
label="Phone Number"
type="number"
required={true}
floatingLabel={true}
/>
<Button variant="raised">Add</Button>
</Form>
</Panel>
</Tab>
<Tab value="pane-2" label="List Contacts">
<Panel>
<ContactList entries={this.state.items} delete={this.deleteItem} />
</Panel>
</Tab>
</Tabs>
)
}
}
экспорт по умолчанию Контакты