【发布时间】:2016-12-12 11:03:03
【问题描述】:
我是 React 新手,想知道我是否在这里采取了正确的方法。
我有一个名为 <App /> 的个人资料页面和一个名为 <ContactDetails /> 的较低级别组件。我想将<ContactDetails /> 的状态存储在<App /> 上,所以我只需在一个地方为所有组件编写AJAX 逻辑。这种想法正确吗?
更具体地说,我感兴趣的是当用户更改输入时我将event.target.value 传递给<App /> 的方式是否正确?
联系方式:
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;
应用:
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'));
【问题讨论】:
-
这段代码没有给你警告不要直接改变道具吗?
-
谷歌浏览器控制台中没有警告
-
我不知道如何运行它。您的联系方式组件返回 2 个未包含在封闭标记中的元素,我收到此错误。
Parsing error: Adjacent JSX elements must be wrapped in an enclosing tag. -
你的整体逻辑是对的,将值传回 App 并存储在 state 中。这段代码不应该运行。
-
啊抱歉,我现在更新一下,我简化了代码以使其更易于阅读并且忘记放入包装器 div。
标签: javascript reactjs