2021-06-15 00:49:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								---
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								id: 5a24c314108439a4d4036183
							 
						 
					
						
							
								
									
										
										
										
											2021-06-27 23:51:13 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								title: Usare JavaScript avanzato nel metodo Render di React
							 
						 
					
						
							
								
									
										
										
										
											2021-06-15 00:49:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								challengeType: 6
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								forumTopicId: 301415
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								dashedName: use-advanced-javascript-in-react-render-method
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								---
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# --description--
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-06-27 23:51:13 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Nelle sfide precedenti, hai imparato come iniettare il codice JavaScript nel codice JSX utilizzando le parentesi graffe, `{ }` , per attività come accedere alle props, passare props, accedere allo stato, inserire commenti nel codice e, più recentemente, stilizzare i componenti. Questi sono tutti casi in cui normalmente si inserisce del JavaScript in JSX, ma non sono l'unico modo in cui è possibile utilizzare il codice JavaScript nei componenti React.
							 
						 
					
						
							
								
									
										
										
										
											2021-06-15 00:49:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-06-27 23:51:13 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Puoi anche scrivere JavaScript direttamente nei tuoi metodi `render` , prima dell'istruzione `return` , ** *senza*** inserirlo all'interno delle parentesi graffe. Questo perché non è ancora all'interno del codice JSX. Quando successivamente vorrai utilizzare una variabile nel codice JSX *all'interno*  dell'istruzione `return` , posizionerai il nome della variabile all'interno delle parentesi graffe.
							 
						 
					
						
							
								
									
										
										
										
											2021-06-15 00:49:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# --instructions--
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-06-27 23:51:13 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Nel codice fornito, il metodo `render`  ha un array che contiene 20 frasi per rappresentare le risposte trovate nel classico giocattolo degli anni '80 Magica Palla Otto. L'evento click del bottone è associato al metodo `ask` , così ogni volta che il pulsante viene cliccato un numero casuale verrà generato e memorizzato come `randomIndex`  nello stato. Alla riga 52, elimina la stringa `change me!`  e riassegna la costante `answer`  in modo che il tuo codice acceda casualmente ad un diverso indice dell'array `possibleAnswers`  ogni volta che il componente si aggiorna. Infine, inserisci la costante `answer`  all'interno dei tag `p` .
							 
						 
					
						
							
								
									
										
										
										
											2021-06-15 00:49:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# --hints--
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-06-27 23:51:13 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Il componente `MagicEightBall`  dovrebbe esistere ed essere presentato nella pagina.
							 
						 
					
						
							
								
									
										
										
										
											2021-06-15 00:49:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								assert.strictEqual(
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Enzyme.mount(React.createElement(MagicEightBall)).find('MagicEightBall')
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    .length,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  1
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-06-27 23:51:13 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Il primo figlio di `MagicEightBall`  dovrebbe essere un elemento `input` .
							 
						 
					
						
							
								
									
										
										
										
											2021-06-15 00:49:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								assert.strictEqual(
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Enzyme.mount(React.createElement(MagicEightBall))
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    .children()
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    .childAt(0)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    .name(),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  'input'
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-06-27 23:51:13 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Il terzo figlio di `MagicEightBall`  dovrebbe essere un elemento `button` .
							 
						 
					
						
							
								
									
										
										
										
											2021-06-15 00:49:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								assert.strictEqual(
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Enzyme.mount(React.createElement(MagicEightBall))
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    .children()
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    .childAt(2)
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    .name(),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  'button'
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-06-27 23:51:13 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Lo stato di `MagicEightBall`  dovrebbe essere inizializzato con una proprietà `userInput`  e una proprietà `randomIndex`  entrambe impostate su un valore di una stringa vuota.
							 
						 
					
						
							
								
									
										
										
										
											2021-06-15 00:49:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								assert(
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Enzyme.mount(React.createElement(MagicEightBall)).state('randomIndex') ===
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    '' & & 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Enzyme.mount(React.createElement(MagicEightBall)).state('userInput') === ''
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-06-27 23:51:13 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Quando `MagicEightBall`  viene montato per la prima volta sul DOM, dovrebbe restituire un elemento `p`  vuoto.
							 
						 
					
						
							
								
									
										
										
										
											2021-06-15 00:49:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								assert(
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  Enzyme.mount(React.createElement(MagicEightBall)).find('p').length === 1 & & 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    Enzyme.mount(React.createElement(MagicEightBall)).find('p').text() === ''
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
									
										
										
										
											2021-06-27 23:51:13 +05:30 
										
									 
								 
							 
							
								
									
										 
								
							 
							
								 
							
							
								Quando il testo viene inserito nell'elemento `input`  e il pulsante viene cliccato, il componente `MagicEightBall`  dovrebbe restituire un elemento `p`  che contiene un elemento casuale prendendolo dall'array `possibleAnswers` .
							 
						 
					
						
							
								
									
										
										
										
											2021-06-15 00:49:18 -07:00 
										
									 
								 
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```js
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								(() => {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const comp = Enzyme.mount(React.createElement(MagicEightBall));
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const simulate = () => {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    comp.find('input').simulate('change', { target: { value: 'test?' } });
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    comp.find('button').simulate('click');
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  };
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const result = () => comp.find('p').text();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const _1 = () => {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    simulate();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return result();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  };
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const _2 = () => {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    simulate();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return result();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  };
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const _3 = () => {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    simulate();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return result();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  };
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const _4 = () => {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    simulate();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return result();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  };
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const _5 = () => {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    simulate();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return result();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  };
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const _6 = () => {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    simulate();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return result();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  };
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const _7 = () => {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    simulate();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return result();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  };
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const _8 = () => {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    simulate();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return result();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  };
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const _9 = () => {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    simulate();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return result();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  };
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const _10 = () => {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    simulate();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return result();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  };
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const _1_val = _1();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const _2_val = _2();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const _3_val = _3();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const _4_val = _4();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const _5_val = _5();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const _6_val = _6();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const _7_val = _7();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const _8_val = _8();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const _9_val = _9();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const _10_val = _10();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const actualAnswers = [
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    _1_val,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    _2_val,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    _3_val,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    _4_val,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    _5_val,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    _6_val,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    _7_val,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    _8_val,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    _9_val,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    _10_val
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ];
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const hasIndex = actualAnswers.filter(
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    (answer, i) => possibleAnswers.indexOf(answer) !== -1
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  );
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  const notAllEqual = new Set(actualAnswers);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  assert(notAllEqual.size > 1 & &  hasIndex.length === 10);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								})();
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# --seed--
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								## --after-user-code--
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```jsx
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								var possibleAnswers = [
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  'It is certain',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  'It is decidedly so',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  'Without a doubt',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  'Yes, definitely',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  'You may rely on it',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  'As I see it, yes',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  'Outlook good',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  'Yes',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  'Signs point to yes',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  'Reply hazy try again',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  'Ask again later',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  'Better not tell you now',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  'Cannot predict now',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  'Concentrate and ask again',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  "Don't count on it",
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  'My reply is no',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  'My sources say no',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  'Outlook not so good',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  'Very doubtful',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  'Most likely'
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								];
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								ReactDOM.render(< MagicEightBall  / > , document.getElementById('root'));
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								## --seed-contents--
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```jsx
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const inputStyle = {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  width: 235,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  margin: 5
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								};
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class MagicEightBall extends React.Component {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  constructor(props) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    super(props);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this.state = {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      userInput: '',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      randomIndex: ''
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    };
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this.ask = this.ask.bind(this);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this.handleChange = this.handleChange.bind(this);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ask() {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if (this.state.userInput) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      this.setState({
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        randomIndex: Math.floor(Math.random() * 20),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        userInput: ''
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      });
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  handleChange(event) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this.setState({
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      userInput: event.target.value
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    });
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  render() {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const possibleAnswers = [
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'It is certain',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'It is decidedly so',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'Without a doubt',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'Yes, definitely',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'You may rely on it',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'As I see it, yes',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'Outlook good',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'Yes',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'Signs point to yes',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'Reply hazy try again',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'Ask again later',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'Better not tell you now',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'Cannot predict now',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'Concentrate and ask again',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      "Don't count on it",
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'My reply is no',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'My sources say no',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'Most likely',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'Outlook not so good',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'Very doubtful'
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ];
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const answer = 'change me!'; // Change this line
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return (
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < input 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          type='text'
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          value={this.state.userInput}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          onChange={this.handleChange}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          style={inputStyle}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        />
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < br  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < button  onClick = {this.ask} > Ask the Magic Eight Ball!< / button > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < br  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < h3 > Answer:< / h3 > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < p > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          {/* Change code below this line */}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          {/* Change code above this line */}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < / p > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    );
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								# --solutions--
  
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```jsx
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								const inputStyle = {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  width: 235,
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  margin: 5
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								};
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								class MagicEightBall extends React.Component {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  constructor(props) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    super(props);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this.state = {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      userInput: '',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      randomIndex: ''
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    };
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this.ask = this.ask.bind(this);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this.handleChange = this.handleChange.bind(this);
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  ask() {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    if (this.state.userInput) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      this.setState({
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        randomIndex: Math.floor(Math.random() * 20),
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        userInput: ''
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      });
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  handleChange(event) {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    this.setState({
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      userInput: event.target.value
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    });
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  render() {
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const possibleAnswers = [
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'It is certain',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'It is decidedly so',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'Without a doubt',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'Yes, definitely',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'You may rely on it',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'As I see it, yes',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'Outlook good',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'Yes',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'Signs point to yes',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'Reply hazy try again',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'Ask again later',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'Better not tell you now',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'Cannot predict now',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'Concentrate and ask again',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      "Don't count on it",
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'My reply is no',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'My sources say no',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'Outlook not so good',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'Very doubtful',
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      'Most likely'
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    ];
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    const answer = possibleAnswers[this.state.randomIndex];
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    return (
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < input 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          type='text'
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          value={this.state.userInput}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          onChange={this.handleChange}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								          style={inputStyle}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        />
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < br  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < button  onClick = {this.ask} > Ask the Magic Eight Ball!< / button > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < br  / > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < h3 > Answer:< / h3 > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								        < p > {answer}< / p > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								      < / div > 
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								    );
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								  }
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								}
							 
						 
					
						
							
								
							 
							
								
							 
							
								 
							
							
								```