질문 모음과 관련된 옵션을 '퀴즈'라는 firebase ref에 푸시하려고합니다. 제출을 클릭하면 콘솔에서 다음과 같이 표시됩니다.Error - Firebase.push failed :
Uncaught Error: Firebase.push failed: first argument contains an invalid key ($$typeof) in property 'quizzes.questions.0'. Keys must be non-empty strings and can't contain ".", "#", "$", "/", "[", or "]"
나는 ($$typeof)
이 문제를 해결하는 방법을 여기에 나 정말 무엇을 의미하는지 모른다. 나는 Option 구성 요소를 Question 구성 요소 배열 []로 푸시하고 질문 구성 요소를 QuizBuilderForm 배열 []에 넣습니다.
감사합니다!
는 여기에 내가 코드에서 발견이 중요한 실수가 있습니다
// Quiz Builder Component
import React from 'react';
import Question from './Question';
import firebase from 'firebase';
const QuizBuilderForm = React.createClass({
getInitialState: function() {
return {
questions: [],
};
},
addQuestion: function(questions, index) {
index = this.state.questions.length;
questions = this.state.questions;
questions.push(<Question key={index} id={index}/>);
index++;
this.setState({
questions: questions
});
},
componentDidMount: function() {
this.addQuestion();
},
handleSubmit: function(event) {
event.preventDefault();
this.firebaseRef = firebase.database().ref('quizzes');
this.firebaseRef.push({
questions: this.state.questions
});
this.refs.form.reset();
this.setState({
questions: []
});
},
render: function() {
return (
<form className="quiz-form" onSubmit={this.handleSubmit} ref="form">
{this.state.questions}
<button type="button" className="add-question" onClick={this.addQuestion}>Add a question</button>
<button type="submit">Create Quiz</button>
</form>
);
}
});
export default QuizBuilderForm;
// Question Component
import React from 'react';
import Option from './Option';
const Question = React.createClass({
getInitialState: function() {
return {
value: "",
options: []
};
},
handleChange: function(e) {
this.setState({
value: e.target.value
});
},
addOption: function(options, index) {
index = this.state.options.length;
options = this.state.options;
options.push(<Option key={index} id={index} />);
index++;
this.setState({
options: options
});
},
componentDidMount: function() {
this.addOption();
},
render: function() {
return (
<div className="question">
<input type="text" value={this.state.value} onChange={this.handleChange}></input>
{this.state.options}
<button type="button" onClick={this.addOption}>Add another option</button>
</div>
);
}
});
export default Question;
// Options component
import React from 'react';
const Option = React.createClass({
getInitialState: function() {
return {
value: ""
};
},
handleChange: function(e) {
this.setState({
value: e.target.value
});
},
render: function() {
return (
<input type="text" value={this.state.value} placeholder="Enter an answer here" onChange={this.handleChange}></input>
);
}
});
export default Option;
push() 이벤트 바로 전에 this.state.questions의 내용을 로깅 해보십시오. 이것은 React 구성 요소이며 $ 및 $$로 시작하는 특수 키를 포함합니다. 이러한 문자는 Firebase 키에 허용되지 않으므로 오류가 나타내는 것처럼 거부됩니다. 이 데이터를 유효한 JSON으로 분석하고 Firebase의 허용 스키마와 일치하는 키를 파싱해야합니다. 여기에서 시도한 것처럼 React 객체를 직접 DB에 저장할 수 없습니다. 더 쉬운 통합을 위해 [reactfire] (https://github.com/firebase/reactfire)를 확인하십시오. – Kato
응답 해 주셔서 감사합니다. 나는 데이터를 파싱하는 방법을 모를 것이라고 생각한다. 나는별로 친숙하지 않다. 내가 갇혀있는 곳은 필자가 동적으로 입력 필드를 추가하는 것이고, 동적으로 추가 된 각 입력 필드 값을 잡아서 Firebase에 추가 할 수있는 좋은 방법이 확실치 않다. 분명히 이것은 정적 인 형태의 케이크 조각입니다. 그냥 ref를 잡아 줘야하지만 동적 인 형태로 나를 위해 꽤 도전적입니다. 거기에 어떤 제안? 감사! – maxwellgover