2016-11-23 42 views
0

你好我是JS反應初學者,使一個項目在運行我的代碼在控制檯中有一個錯誤chat.js:89未捕獲的ReferenceError:綁定未定義(...)在陣營JS

chat.js:89 Uncaught ReferenceError: bind is not defined(…)

我無法找到錯誤,請幫助我。

class CommentBox extends React.Component{ 
    constructor(){ 
     super(); 
     this.state = {data: []} 
    } 
    loadCommentsFromServer() { 
    $.ajax({ 
     url: 'api/get-latest-comments.php', 
     dataType: 'json', 
     cache: false, 
     success(data) { 
     bind(this.setState({data: data})) 
     }, 
     error(xhr, status, err) { 
     bind(console.error(this.props.url, status, err.toString())) 
     } 
    }); 
    } 

    handleCommentSubmit(comment) { 
    // TODO: submit to the server and refresh the list 
     var comments = this.state.data; 
     var newComments = comments.concat([comment]); 
     this.setState({data: newComments}); 
     $.ajax({ 
      url: 'api/save-comment.php', 
      dataType: 'json', 
      type: 'POST', 
      data: comment, 
      success(data) { 
      bind(this.setState({data: data})) 
      }, 
      error(xhr, status, err) { 
      bind(console.error(this.props.url, status, err.toString())) 
      } 
     }); 
    } 
    componentDidMount() { 
    this.loadCommentsFromServer(); 
    setInterval(this.loadCommentsFromServer, this.props.pollInterval); 
    } 

    render() { 
    return (
     <div className="commentBox"> 

     <CommentForm onCommentSubmit={this.handleCommentSubmit} /> 
     <div className="page-header"> 
      <h1>Comments</h1> 
     </div> 
     <CommentList data={this.state.data} /> 
     </div> 
    ); 
    } 
} 

舊的index.php的腳本

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.0/react.js"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/0.14.0/react-dom.js"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.6.15/browser.js"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/0.3.2/marked.min.js"></script> 

新的index.php的腳本

<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.js"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.js"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/babel-core/5.8.34/browser.min.js"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.1.1/jquery.min.js"></script> 
<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/0.3.6/marked.min.js"></script> 

回答

0

您使用bind()是錯誤的方式。您需要將ajax中的successerror函數綁定到正確的上下文,而不是函數中的數據。使用綁定的

success: function(data) { 
    this.setState({data: data}) 
}.bind(this), 

代碼:

class CommentBox extends React.Component{ 
    constructor(){ 
     super(); 
     this.state = {data: []} 
    } 
    loadCommentsFromServer =() => { 
    $.ajax({ 
     url: 'api/get-latest-comments.php', 
     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) 
    }); 
    } 

    handleCommentSubmit = (comment) => { 
    // TODO: submit to the server and refresh the list 
     var comments = this.state.data; 
     var newComments = comments.concat([comment]); 
     this.setState({data: newComments}); 
     $.ajax({ 
      url: 'api/save-comment.php', 
      dataType: 'json', 
      type: 'POST', 
      data: comment, 
      success: function(data) { 
      this.setState({data: data}) 
      }.bind(this), 
      error: function(xhr, status, err) { 
      console.error(this.props.url, status, err.toString()) 
      }.bind(this) 
     }); 
    } 
    componentDidMount() { 
    this.loadCommentsFromServer(); 
    setInterval(this.loadCommentsFromServer, this.props.pollInterval); 
    } 

    render() { 
    return (
     <div className="commentBox"> 

     <CommentForm onCommentSubmit={this.handleCommentSubmit} /> 
     <div className="page-header"> 
      <h1>Comments</h1> 
     </div> 
     <CommentList data={this.state.data} /> 
     </div> 
    ); 
    } 
} 
+0

你的幫助我已經在運行此代碼,但'} .bind感謝名單(本),'在控制檯 意外標記錯誤(89 :6)(...) –

+0

你會得到什麼錯誤 –

+0

早些時候,我添加了舊的腳本,它工作正常,但現在我已更新腳本與新的更新文件發生這些錯誤... 我編輯了我的問題,以顯示你的新舊請親眼看看他們,讓我知道我應該做什麼? –

相關問題