I'm new to React and was wondering whether I took the right approach here.
I have a profile page called <App />
and a lower level component called <ContactDetails />
. I wanted to store the state of <ContactDetails />
on <App />
, so I only have to write AJAX logic in one place for all components. Is this thinking correct?
And more specifically, I'm interested whether the way I pass event.target.value
to the <App />
when the user changes the input is correct?
ContactDetails:
import React from 'react';
class ContactDetails extends React.Component {
render() {
return (
<div>
<input value={this.props.contactDetails.email} onChange={event => this.props.onContactDetailsChange(Object.assign(this.props.contactDetails, {email: event.target.value}))} />
<input value={this.props.contactDetails.firstName} onChange={event => this.props.onContactDetailsChange(Object.assign(this.props.contactDetails, {firstName: event.target.value}))} />
</div>
)
}
}
export default ContactDetails;
App:
import React from 'react';
import ReactDOM from 'react-dom';
import ContactDetails from './components/contact_details';
class App extends React.Component {
constructor(props) {
super(props);
this.state = {
contactDetails: {
email: 'a@a.com',
firstName: ''
}
}
}
render() {
return (
<ContactDetails
onContactDetailsChange={contactDetails => this.setState({ contactDetails })}
contactDetails={this.state.contactDetails}
/>
);
}
}
ReactDOM.render(<App />, document.querySelector('.container'));