반응에서 설문지를 작성하려고합니다. 지금은 텍스트 상자를 사용하여 모든 답변을 수락합니다. 이것들은 아약스 호출을 사용하여 내 API로 전송됩니다. 나는루프 내에서 setState - 반응
questionnaire: {
{question: "question", answer: "answer"},
{question: "question2", answer: "answer2"},
{question: "question3", answer: "answer3"}
}
내 코드는 지금까지 정말 지저분 내 PARAMS는 다음과 같은 구조를 갖고 싶어하지만 어떻게 든 내가 원하는 결과를 얻고있다. 그러나, 나는 내 대답의 상태를 업데이트하고 또한 Uncaught TypeError: Cannot read property 'setState' of undefined
import React, { PropTypes } from 'react'
import ReactDOM from 'react-dom';
import SubmitButton from '../components/SubmitButton'
export default class QuestionaireContainer extends React.Component {
constructor(props, context) {
super(props, context);
this.state = { q: this.props.data,
questionaire: [],
};
}
componentDidMount() {
var q = this.state.q
var questionaire = this.state.questionaire
q.map(function(map){
questionaire.push({"id": map.id,
"question": map.question,
"answer": '',
});
})
this.setState({questionaire: questionaire})
}
submit(e){
e.preventDefault();
var data = {
questionaires: this.state.questionaire
}
$.ajax({
type: "GET",
url: "/questionaries/save_questions",
data: data,
dataType: 'JSON',
success:()=>{
alert("hello")
}
})
}
render() {
var questionNodes = this.state.questionaire.map(function(question){
var updateTextBox = (e) => {
console.log(question.answer);
this.setState({"answer": e.target.value});
}
return (
<li key={question.id}>
<div className="box-sed">
<div className="que-set registration question-type">
<span className="icon-ahead">
<i aria-hidden="true" className="fa fa-question-circle"></i>
</span>
<h2>{question.question}</h2>
<p>Lorem Ipsum has been the industry's standard dummy text ever since the 1500's, when an unknown printer took a galley of type and scrambled it to make a type specimen book.</p>
</div>
<div className="registration question-type">
<input type="text" placeholder="Type answer" className="input-text" value={question.answer} onChange={updateTextBox} />
</div>
</div>
</li>
);
});
return (
<div className="question">
<form onSubmit={this.submit.bind(this)}>
<ul>
{questionNodes}
</ul>
<SubmitButton/>
</form>
</div>
);
}
}
가 계속 드릴 수 없습니다의 PARAMS는 배열이 아닌 해시 초기 상태를 설정하는 방법을 다른 당장 문이 안 열려 그림 밖으로 내 질문들. 코드가 정말 더러울 수도 있지만 아직까지는이 작업을 수행 할 수 없었습니다.
나는 내 자신을 매우 친절하게 생각하지 않을 수 있으며, 친절하게도 나와 함께 감싸고 의견을 남기므로 내가 원하는 것을 더 잘 이해할 수 있도록 도와 줄 수 있습니다. 모든 변경 사항 및 제안 사항은 훌륭합니다. 미리 감사드립니다 :) 나는 다니엘의 조언을 복용 결국 다른 구성 요소를 반응에 텍스트 상자를 놓고 부모 하나라고 불렀다
--UPDATE--
.
또한 i 은 루프 내부의 전체 상태를 생략하고 this.props
으로 앞으로 이동했습니다. 하위 구성 요소 (QuestionaireComponent
)의 text box's
상태를 업데이트하고 refs
을 사용하는 상위 구성 요소 인 QuestionaireContainer
에서 해당 상태를 사용했습니다.
QuestionaireContainer.jsx을
import React, { PropTypes } from 'react'
import ReactDOM from 'react-dom';
import SubmitButton from '../components/SubmitButton'
import QuestionaireComponent from '../components/QuestionaireComponent'
export default class QuestionaireContainer extends React.Component {
submit(e){
e.preventDefault();
var data = {
questionaires: []
}
this.props.data.map(map => {
data.questionaires.push(this.refs[map.id].state)
});
console.log(data);
console.log("Done");
}
render() {
var questionNodes = this.props.data.map(questions => {
return (
<QuestionaireComponent question={questions.question} key={questions.id} id = {questions.id} ref={questions.id}/>
);
});
return (
<div className="question">
<form onSubmit={this.submit.bind(this)}>
<ul>
{questionNodes}
</ul>
<SubmitButton/>
</form>
</div>
);
}
}
및 QuestionaireComponent.jsx이
import React, {PropTypes} from 'react'
export default class QuestionaireComponent extends React.Component {
static propTypes = {
question: PropTypes.string.isRequired,
};
constructor(props) {
super(props);
this.state = { answer: '',
question: this.props.question,
id: this.props.id,
};
}
updateTextBox = (e) => {
this.setState({answer: e.target.value})
}
render() {
return (
<li>
<div className="box-sed">
<div className="que-set registration question-type">
<span className="icon-ahead">
<i aria-hidden="true" className="fa fa-question-circle"></i>
</span>
<h2>{this.state.question}</h2>
<p>Lorem Ipsum has been the industry's standard dummy text ever since the 1500's, when an unknown printer took a galley of type and scrambled it to make a type specimen book.</p>
</div>
<div className="registration question-type">
<input type="text" placeholder="Type answer" className="input-text" value={this.state.answer} onChange={this.updateTextBox} />
</div>
</div>
</li>
);
}
}
희망이 찾고있는 사람이 누구의 도움 :
다음은 작업 날 잡았어 내 마지막 코드 비슷한 것.
나는'function (question)'을'=>'로 바꾸었고'this.setState'에 대한 에러는 없어졌습니다. 그러나 이것은 내 '상태'를 변경하지 않습니다. 'this.setState ({ "answer": e.target.value}); '를 다른 것으로 업데이트해야합니까? – Aakanksha
각 질문마다 다른 구성 요소를 만드는 것이 좋습니다. –
어떻게하면 그 상태를 유지할 수 있습니까? 나는 처음에 그것을했는데 React가 경고 한 제어되지 않은 구성 요소를 받기 시작했고 상태가 부모 구성 요소에서 업데이트되지 않았 음을 의미합니다. QuestionaireContainer. – Aakanksha