2018-10-04 14:37:37 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								---
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								id: 5a24c314108439a4d4036179
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								title: Create a Controlled Form
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								challengeType: 6
							 
						 
					
						
							
								
									
										
										
										
											2019-08-05 09:17:33 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								forumTopicId: 301384
							 
						 
					
						
							
								
									
										
										
										
											2021-01-13 03:31:00 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								dashedName: create-a-controlled-form
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 14:37:37 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								---
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-27 19:02:05 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# --description--
  
						 
					
						
							
								
									
										
										
										
											2018-10-04 14:37:37 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-27 19:02:05 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								The last challenge showed that React can control the internal state for certain elements like `input`  and `textarea` , which makes them controlled components. This applies to other form elements as well, including the regular HTML `form`  element.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# --instructions--
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								The `MyForm`  component is set up with an empty `form`  with a submit handler. The submit handler will be called when the form is submitted.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								We've added a button which submits the form. You can see it has the `type`  set to `submit`  indicating it is the button controlling the form. Add the `input`  element in the `form`  and set its `value`  and `onChange()`  attributes like the last challenge. You should then complete the `handleSubmit`  method so that it sets the component state property `submit`  to the current input value in the local `state` .
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-06-18 14:05:05 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								**Note:** You also must call `event.preventDefault()`  in the submit handler, to prevent the default form submit behavior which will refresh the web page. For camper convenience, the default behavior has been disabled here to prevent refreshes from resetting challenge code.
							 
						 
					
						
							
								
									
										
										
										
											2020-11-27 19:02:05 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Finally, create an `h1`  tag after the `form`  which renders the `submit`  value from the component's `state` . You can then type in the form and click the button (or press enter), and you should see your input rendered to the page.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# --hints--
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								`MyForm`  should return a `div`  element which contains a `form`  and an `h1`  tag. The form should include an `input`  and a `button` . 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								assert(
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  (() => {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const mockedComponent = Enzyme.mount(React.createElement(MyForm));
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return (
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      mockedComponent.find('div').children().find('form').length === 1 & & 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      mockedComponent.find('div').children().find('h1').length === 1 & & 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      mockedComponent.find('form').children().find('input').length === 1 & & 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      mockedComponent.find('form').children().find('button').length === 1
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    );
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  })()
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								The state of `MyForm`  should initialize with `input`  and `submit`  properties, both set to empty strings.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								assert(
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Enzyme.mount(React.createElement(MyForm)).state('input') === '' & & 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Enzyme.mount(React.createElement(MyForm)).state('submit') === ''
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Typing in the `input`  element should update the `input`  property of the component's state.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								(() => {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const mockedComponent = Enzyme.mount(React.createElement(MyForm));
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const _1 = () => {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    mockedComponent.setState({ input: '' });
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return mockedComponent.state('input');
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  };
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const _2 = () => {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    mockedComponent
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      .find('input')
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      .simulate('change', { target: { value: 'TestInput' } });
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      state: mockedComponent.state('input'),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      inputVal: mockedComponent.find('input').props().value
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    };
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  };
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const before = _1();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const after = _2();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  assert(
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    before === '' & & 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      after.state === 'TestInput' & & 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      after.inputVal === 'TestInput'
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  );
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								})();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								Submitting the form should run `handleSubmit`  which should set the `submit`  property in state equal to the current input.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								(() => {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const mockedComponent = Enzyme.mount(React.createElement(MyForm));
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const _1 = () => {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    mockedComponent.setState({ input: '' });
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    mockedComponent.setState({ submit: '' });
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    mockedComponent
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      .find('input')
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      .simulate('change', { target: { value: 'SubmitInput' } });
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return mockedComponent.state('submit');
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  };
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const _2 = () => {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    mockedComponent.find('form').simulate('submit');
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return mockedComponent.state('submit');
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  };
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const before = _1();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const after = _2();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  assert(before === '' & &  after === 'SubmitInput');
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								})();
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 14:37:37 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-06-18 14:05:05 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								`handleSubmit`  should call `event.preventDefault`  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const handleSubmit = MyForm.prototype.handleSubmit.toString();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const allMatches = handleSubmit.match(/\bevent\.preventDefault\(\s*?\)/g) ?? [];
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const blockCommented = handleSubmit.match(
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  /\/\*.*?\bevent\.preventDefault\(\s*?\).*?\*\//gs
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const lineCommented = handleSubmit.match(
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  /\/\/.*?\bevent\.preventDefault\(\s*?\)/g
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const commentedMatches = [...(blockCommented ?? []), ...(lineCommented ?? [])];
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								assert(
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  // At least one event.preventDefault() call exists and is not commented out
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  allMatches.length > commentedMatches.length
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-27 19:02:05 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								The `h1`  header should render the value of the `submit`  field from the component's state.
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								(() => {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const mockedComponent = Enzyme.mount(React.createElement(MyForm));
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const _1 = () => {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    mockedComponent.setState({ input: '' });
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    mockedComponent.setState({ submit: '' });
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    mockedComponent
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      .find('input')
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      .simulate('change', { target: { value: 'TestInput' } });
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return mockedComponent.find('h1').text();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  };
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const _2 = () => {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    mockedComponent.find('form').simulate('submit');
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return mockedComponent.find('h1').text();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  };
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const before = _1();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const after = _2();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  assert(before === '' & &  after === 'TestInput');
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								})();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 14:37:37 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-27 19:02:05 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# --seed--
  
						 
					
						
							
								
									
										
										
										
											2020-09-03 01:24:22 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-27 19:02:05 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								## --after-user-code--
  
						 
					
						
							
								
									
										
										
										
											2018-10-04 14:37:37 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-27 19:02:05 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								```jsx
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								ReactDOM.render(< MyForm  / > , document.getElementById('root'));
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								## --seed-contents--
  
						 
					
						
							
								
									
										
										
										
											2018-10-04 14:37:37 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```jsx
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class MyForm extends React.Component {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  constructor(props) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    super(props);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this.state = {
							 
						 
					
						
							
								
									
										
										
										
											2018-10-20 21:02:47 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      input: '',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      submit: ''
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 14:37:37 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    };
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this.handleChange = this.handleChange.bind(this);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this.handleSubmit = this.handleSubmit.bind(this);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  handleChange(event) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this.setState({
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      input: event.target.value
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    });
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  handleSubmit(event) {
							 
						 
					
						
							
								
									
										
										
										
											2020-09-15 09:53:25 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    // Change code below this line
							 
						 
					
						
							
								
									
										
										
										
											2021-06-18 14:05:05 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-15 09:53:25 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    // Change code above this line
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 14:37:37 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  render() {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return (
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < form  onSubmit = {this.handleSubmit} > 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-15 09:53:25 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          {/* Change code below this line */}
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 14:37:37 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-15 09:53:25 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          {/* Change code above this line */}
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 14:37:37 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								          < button  type = 'submit' > Submit!< / button > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < / form > 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-15 09:53:25 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        {/* Change code below this line */}
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 14:37:37 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-09-15 09:53:25 -07:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								        {/* Change code above this line */}
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 14:37:37 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								      < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    );
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
									
										
										
										
											2020-09-03 01:24:22 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 14:37:37 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-11-27 19:02:05 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								# --solutions--
  
						 
					
						
							
								
									
										
										
										
											2018-10-04 14:37:37 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2020-07-13 18:58:50 +02:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								```jsx
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 14:37:37 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								class MyForm extends React.Component {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  constructor(props) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    super(props);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this.state = {
							 
						 
					
						
							
								
									
										
										
										
											2018-10-20 21:02:47 +03:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      input: '',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      submit: ''
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 14:37:37 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								    };
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this.handleChange = this.handleChange.bind(this);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this.handleSubmit = this.handleSubmit.bind(this);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  handleChange(event) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this.setState({
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      input: event.target.value
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    });
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  handleSubmit(event) {
							 
						 
					
						
							
								
									
										
										
										
											2020-09-03 01:24:22 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								    event.preventDefault();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this.setState(state => ({
							 
						 
					
						
							
								
									
										
										
										
											2020-08-11 22:42:27 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								      submit: state.input
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }));
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 14:37:37 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  render() {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return (
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < form  onSubmit = {this.handleSubmit} > 
							 
						 
					
						
							
								
									
										
										
										
											2020-09-03 01:24:22 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								          < input  value = {this.state.input}  onChange = {this.handleChange}  / > 
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 14:37:37 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								          < button  type = 'submit' > Submit!< / button > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < / form > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < h1 > {this.state.submit}< / h1 > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    );
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
									
										
										
										
											2020-09-03 01:24:22 +01:00 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
									
										
										
										
											2018-10-04 14:37:37 +01:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								```