Skip to content

Instantly share code, notes, and snippets.

@valex
Created October 21, 2018 12:07
Show Gist options
  • Save valex/02a0adf619b6fca0f7aa063b6b9515f4 to your computer and use it in GitHub Desktop.
Save valex/02a0adf619b6fca0f7aa063b6b9515f4 to your computer and use it in GitHub Desktop.
Component lifecycle reset update (set state to old state)
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>Lifecycle reset</title>
<style>
body, textarea {
font-family: Courier;
}
</style>
</head>
<body>
<div id="app">
<!-- my app renders here -->
</div>
<script charset="utf-8" crossorigin src="https://cdnjs.cloudflare.com/ajax/libs/babel-standalone/6.26.0/babel.min.js"></script>
<script crossorigin src="https://unpkg.com/react@16/umd/react.development.js"></script>
<script crossorigin src="https://unpkg.com/react-dom@16/umd/react-dom.development.js"></script>
<script crossorigin src="https://cdnjs.cloudflare.com/ajax/libs/prop-types/15.6.2/prop-types.min.js"></script>
<script type="text/babel">
class TextAreaCounter extends React.Component {
constructor(props) {
super(props);
this.state = {
text: props.defaultValue
};
this._textChange = this._textChange.bind(this);
}
static defaultProps = {
defaultValue: 'default text'
};
componentDidUpdate(oldProps, oldState) {
if (this.state.text.length > 3) {
console.log('The text is too long, abort, abort!');
this.setState((state, props) => {
return oldState;
});
}
};
_textChange(event) {
this.setState({
text: event.target.value,
});
};
render() {
return (
<div>
<textarea onChange={this._textChange} value={this.state.text}></textarea>
<h3>{this.state.text.length}</h3>
</div>
);
};
}
TextAreaCounter.propTypes = {
defaultValue: PropTypes.string
};
var myTextAreaCounter = ReactDOM.render(
React.createElement(TextAreaCounter, {
defaultValue: "Bob",
}),
document.getElementById("app")
);
</script>
</body>
</html>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment