Я пытаюсь написать счетчик слов с React.Идея состоит в том, что, как только вы превысите максимальное количество слов, появится предупреждение, и пользователь не сможет вставить больше символов.Моя идея состояла в том, чтобы использовать атрибут maxlength.После того, как необходимые слова и написанные слова будут одинакового количества, будут подсчитаны символы и активирован атрибут maxlength через состояние.
Атрибут maxlength не работает должным образом.Как я могу это исправить?
HTML
<div id="app"></div>
REACT
class MyComponent extends React.Component {
constructor(props){
super(props);
this.state = {
firstValue: '',
secondValue: '',
needWords: '',
wordCount: '',
limWords: null,
}
this.firstHandle = this.firstHandle.bind(this)
this.handleSubmit = this.handleSubmit.bind(this)
this.secondHandle = this.secondHandle.bind(this)
}
firstHandle(e){
this.setState({
firstValue: e.target.value
})
}
handleSubmit(e){
e.preventDefault()
this.setState({
needWords: this.state.firstValue
})
}
secondHandle(event){
this.setState({
secondValue: event.target.value,
wordCount: event.target.value === '' ? 0 : this.state.secondValue.split(' ').length,
limWords: (this.state.needWords - this.state.wordCount) < 0 ? this.state.secondValue.length : null
})
}
render(){
var result = this.state.needWords - this.state.wordCount;
let tooManyChars;
if (result < 0){
const tooManyCharStyle = {
color: 'red'
}
tooManyChars = <p style={tooManyCharStyle}>You exceeded the maximum number of words!!</p>;
}
return(
<div>
<form onSubmit={this.handleSubmit}>
<p>How many words do you have to write?</p>
<input
type="text"
value={this.state.firstValue}
onChange={this.firstHandle}></input>
<button type="submit">Go</button>
</form>
<form>
<p>You still have to write {result} words</p>
<textarea
type="text"
value={this.state.value}
onChange={this.secondHandle}
maxLength={this.state.limWords}>
</textarea>
{ tooManyChars }
</form>
</div>
);
}
}
ReactDOM.render(<MyComponent/>, document.getElementById('app'));