You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
60 lines
1.4 KiB
60 lines
1.4 KiB
import React from "react"; |
|
import "./App.css"; |
|
|
|
import Validation from "./Validation"; |
|
import Char from "./Char"; |
|
|
|
class App extends React.Component { |
|
constructor(props) { |
|
super(props); |
|
this.state = { message: "" }; |
|
} |
|
|
|
// handleChange = event => { |
|
// let newMessage = event.target.value; |
|
// this.setState({ message: newMessage }); |
|
// }; |
|
|
|
handleChange(event) { |
|
let newMessage = event.target.value; |
|
this.setState({ message: newMessage }); |
|
}; |
|
|
|
handleDelete(index) { |
|
let newMessage = [...this.state.message]; |
|
let newSplited = newMessage.toString().split(","); |
|
newSplited.splice(index, 1); |
|
newMessage = newSplited.join(""); |
|
this.setState({ message: newMessage }); |
|
} |
|
|
|
render() { |
|
const input = ( |
|
// <input onChange={this.handleChange.bind(this)} value={this.state.message} /> // --> this works |
|
<input type="text" onChange={event => this.handleChange(event)} value={this.state.message} /> // --> but this is better |
|
); |
|
|
|
let splited = this.state.message.split(""); |
|
|
|
const charList = splited.map((item, index) => { |
|
return ( |
|
<Char |
|
key={index} |
|
string={item} |
|
click={() => this.handleDelete(index)} |
|
/> |
|
); |
|
}); |
|
|
|
return ( |
|
<div className="App"> |
|
<h1>{this.state.message}</h1> |
|
{input} |
|
<Validation length={this.state.message.length} /> |
|
{charList} |
|
</div> |
|
); |
|
} |
|
} |
|
|
|
export default App;
|
|
|