Facebook과 같은 콘텐츠 피드를 처리하는 React 앱 구성 요소에서 오류가 발생했습니다.
Feed.js : 94 undefined "parsererror" "SyntaxError : JSON에서 0 위치의 예기치 않은 토큰 <
비슷한 오류가 발생하여 렌더링 함수 내에서 HTML의 오타로 판명되었지만 여기서는 그렇지 않습니다.
더 혼란스럽게도 코드를 이전의 알려진 작동 버전으로 롤백했는데 여전히 오류가 발생합니다.
Feed.js :
import React from 'react';
var ThreadForm = React.createClass({
getInitialState: function () {
return {author: '',
text: '',
included: '',
victim: ''
}
},
handleAuthorChange: function (e) {
this.setState({author: e.target.value})
},
handleTextChange: function (e) {
this.setState({text: e.target.value})
},
handleIncludedChange: function (e) {
this.setState({included: e.target.value})
},
handleVictimChange: function (e) {
this.setState({victim: e.target.value})
},
handleSubmit: function (e) {
e.preventDefault()
var author = this.state.author.trim()
var text = this.state.text.trim()
var included = this.state.included.trim()
var victim = this.state.victim.trim()
if (!text || !author || !included || !victim) {
return
}
this.props.onThreadSubmit({author: author,
text: text,
included: included,
victim: victim
})
this.setState({author: '',
text: '',
included: '',
victim: ''
})
},
render: function () {
return (
<form className="threadForm" onSubmit={this.handleSubmit}>
<input
type="text"
placeholder="Your name"
value={this.state.author}
onChange={this.handleAuthorChange} />
<input
type="text"
placeholder="Say something..."
value={this.state.text}
onChange={this.handleTextChange} />
<input
type="text"
placeholder="Name your victim"
value={this.state.victim}
onChange={this.handleVictimChange} />
<input
type="text"
placeholder="Who can see?"
value={this.state.included}
onChange={this.handleIncludedChange} />
<input type="submit" value="Post" />
</form>
)
}
})
var ThreadsBox = React.createClass({
loadThreadsFromServer: function () {
$.ajax({
url: this.props.url,
dataType: 'json',
cache: false,
success: function (data) {
this.setState({data: data})
}.bind(this),
error: function (xhr, status, err) {
console.error(this.props.url, status, err.toString())
}.bind(this)
})
},
handleThreadSubmit: function (thread) {
var threads = this.state.data
var newThreads = threads.concat([thread])
this.setState({data: newThreads})
$.ajax({
url: this.props.url,
dataType: 'json',
type: 'POST',
data: thread,
success: function (data) {
this.setState({data: data})
}.bind(this),
error: function (xhr, status, err) {
this.setState({data: threads})
console.error(this.props.url, status, err.toString())
}.bind(this)
})
},
getInitialState: function () {
return {data: []}
},
componentDidMount: function () {
this.loadThreadsFromServer()
setInterval(this.loadThreadsFromServer, this.props.pollInterval)
},
render: function () {
return (
<div className="threadsBox">
<h1>Feed</h1>
<div>
<ThreadForm onThreadSubmit={this.handleThreadSubmit} />
</div>
</div>
)
}
})
module.exports = ThreadsBox
Chrome 개발자 도구에서이 기능에서 오류가 발생하는 것 같습니다.
loadThreadsFromServer: function loadThreadsFromServer() {
$.ajax({
url: this.props.url,
dataType: 'json',
cache: false,
success: function (data) {
this.setState({ data: data });
}.bind(this),
error: function (xhr, status, err) {
console.error(this.props.url, status, err.toString());
}.bind(this)
});
},
선으로 console.error(this.props.url, status, err.toString()
밑줄.
오류가 서버에서 JSON 데이터를 가져 오는 것과 관련이있는 것처럼 보이므로 빈 DB에서 시작했지만 오류가 지속됩니다. React가 지속적으로 서버에 연결하려고 시도하고 결국 브라우저와 충돌하기 때문에 오류가 무한 루프에서 호출 된 것 같습니다.
편집하다:
Chrome 개발 도구 및 Chrome REST 클라이언트를 사용하여 서버 응답을 확인했으며 데이터가 올바른 JSON 인 것으로 보입니다.
편집 2 :
의도 한 API 엔드 포인트가 실제로 올바른 JSON 데이터 및 형식을 리턴하지만 React가 http://localhost:3000/?_=1463499798727
예상 된 것 대신 폴링하는 것 같습니다 http://localhost:3001/api/threads
.
백엔드 데이터를 반환하기 위해 포트 3001에서 실행되는 express 앱으로 포트 3000에서 웹팩 핫 리로드 서버를 실행하고 있습니다. 여기서 실망스러운 것은 이것이 내가 마지막으로 작업했을 때 올바르게 작동했으며 깨뜨릴 수있는 것을 찾을 수 없다는 것입니다.
JSON.parse("<foo>")
JSON 문자열 (로 예상되는 dataType: 'json'
)로 시작할 수없는 것과 같은 작업을 수행하면 발생하는 오류 입니다 <
.
NODE_ENV
. 이것을보십시오 : github.com/facebookincubator/create-react-app/blob/master/…