Using props, state, and Binding
Ouptut
App.js
One thing to notice is we have use event.target.value
inside one of the call back function the UserInput component.
import React, { Component } from 'react'; import './App.css'; import UserInput from './UserInput/UserInput' import UserOutput from './UserOutput/UserOutput' import "./UserOutput/UserOutput.css" class App extends Component { state = { usernames: [ { name: "name1" }, { name: "name2" } ] } onButtonClicked = () => { this.setState({ usernames: [ { name: "name 11111" }, { name: "name 22222" } ] }) } onTextChanged = (event) => { this.setState({ usernames: [ { name: event.target.value }, { name: "name 22222" } ] }) } render() { return ( <div className="App"> <button onClick={this.onButtonClicked} style={{ backgroundColor: "yellow", padding: "10px", margin: "10px" }} >....</button> <UserInput changed={this.onTextChanged} name={this.state.usernames[0].name}></UserInput> <UserOutput name={this.state.usernames[0].name} > </UserOutput> <UserOutput name={this.state.usernames[1].name} ></UserOutput> <hr /> <ol> <li>Create TWO new components: UserInput and UserOutput</li> <li>UserInput should hold an input element, UserOutput two paragraphs</li> <li>Output multiple UserOutput components in the App component (any paragraph texts of your choice)</li> <li>Pass a username (of your choice) to UserOutput via props and display it there</li> <li>Add state to the App component (=> the username) and pass the username to the UserOutput component</li> <li>Add a method to manipulate the state (=> an event-handler method)</li> <li>Pass the event-handler method reference to the UserInput component and bind it to the input-change event</li> <li>Ensure that the new input entered by the user overwrites the old username passed to UserOutput</li> <li>Add two-way-binding to your input (in UserInput) to also display the starting username</li> <li>Add styling of your choice to your components/ elements in the components - both with inline styles and stylesheets</li> </ol> </div> ); } } export default App;
UserInput.js
import React from 'react'; const userInput = (props) =>{ return ( <div> <input onChange={props.changed} value={props.name}></input> </div> ) } export default userInput;
UserOutput.js, UserOutput.css
import React from 'react'; import './UserOutput.css'; const userOutput = (props) => { return ( <div className="UserOutput"> <p>paragraphs 1: name is {props.name}</p> <p>paragraph 2</p> </div> ) } export default userOutput;
.UserOutput{ border: 1px solid black; background-color: #eee; margin: 10px }