사용자로부터 연락처 포럼 제출을 처리하는 구성 요소가 있습니다. 사용자가 제출하여 내 소품 데이터에 추가하는 상태를 취하고 싶습니다. 지금 모든 것은 작동하지만 handleSubmit, 상태를 가져 와서 this.data.props에 전달하여 새 객체를 포함하도록 데이터를 업데이트하는 방법을 모르겠습니다.상태 데이터로 소품 업데이트하기
내 데이터는 개체의 배열입니다. 상태는 사용자 입력을 받아 업데이트합니다. 다음으로 상태 객체를 가져와 내 props.data에 추가 한 다음 화면에 표시하려고합니다.
편집 : 최신 코드로 업데이트
형태의 구성 요소에 소품으로 내려data
통과 부모 컨테이너를 데 당신이 여기에서 찾고있다
import React, { Component, PropTypes } from 'react';
const testData = [
{
name: 'Joe',
email: 'joemail'
},
{
name: 'Bill',
email: 'billmail'
},
{
name: 'Dude',
email: 'dudemail'
}
]
class FormContact extends Component {
constructor(props) {
super(props)
this.state = {
formValues: {
name: '',
email: ''
}
}
}
handleChange(event) {
let formValues = this.state.formValues;
let name = event.target.name;
let value = event.target.value;
formValues[name] = value;
this.setState({
formValues
});
}
handleSubmit(event) {
event.preventDefault();
console.log("NEW FORM VALUES " + this.state.formValues.name + " " + this.state.formValues.email);
const {name, email} = this.state.formValues
this.props.addContact({name, email});
}
render() {
return (
<form onSubmit={this.handleSubmit.bind(this)}>
<label> Name:
<input type="text" name="name" placeholder="Name" value={this.state.formValues["name"]} onChange={this.handleChange.bind(this)} />
</label><br />
<label> Email:
<input type="text" name="email" placeholder="Email" value={this.state.formValues["email"]} onChange={this.handleChange.bind(this)}/>
</label><br />
<input className="btn btn-primary" type="submit" value="Submit" />
</form>
)
}
}
FormContact.PropTypes = {
data: PropTypes.arrayOf(
PropTypes.object
)
}
FormContact.defaultProps = {
data: testData
}
class Contact extends Component {
constructor(props) {
super(props)
this.state = {
data: testData
}
}
addContact(contact) {
this.setState({data: this.state.data.concat(contact)});
}
render() {
const renObjData = this.props.data.map((anObjectMapped, index) => {
return (<p key={index}>
Name: {anObjectMapped.name} < br/>
Email: {anObjectMapped.email} <br /></p>
)
});
return (
<div>
<h1>CONTACT PAGE</h1>
<FormContact data={this.state.data} addContact={this.addContact.bind(this)} />
{renObjData}
</div>
)
}
}
Contact.PropTypes = {
data: PropTypes.arrayOf(
PropTypes.object
)
}
Contact.defaultProps = {
data: testData
}
export default Contact;
데이터 lodash
_.map
을 대체 할 수있는 데이터를 표시하는 방법을 추가이 \t this.setState ({데이터에 정의되지 않은 것 같다 : this.state.data.concat은 (접촉)}); – user3622460은 this.addContact.bind (this)를 추가해야하고 이제 데이터를 올바르게 가리 킵니다. 그것은 지금 내 개체 배열에 데이터를 추가하지만 화면에 인쇄 값을 업데이트하지 않습니다 - 처음 3 개의 연락처 만 표시되고 새로 추가 한 것은 없습니다 – user3622460
코드를 업데이트 할 수 있도록 최신 코드로 게시물을 업데이트 할 수 있습니까? – finalfreq