2017-02-13 91 views
0

我有以下作用的代碼,它工作正常時可變日誌是字符串,即註釋的代碼,但只要我跟陣列代替原木我正在錯誤,錯誤而在陣列替換字符串反應狀態

import React from "react"; 
export default class WelcomeComponent extends React.Component { 
constructor(props) { 
    super(props); 
    this.state = { 
     // logs :'' 
     logs: [] 
    }; 
} 
componentDidMount() { 
    var socket = io('http://localhost:11001'); 
    socket.on('news', (data) => { 
     data = JSON.parse(data); 
     this.setState({ 
      logs: this.state.logs.push(data) 
      // logs: data + this.state.logs 
     }); 
    }); 
} 
render() { 
    return (<div> {this.state.logs}</div>); 
} 
} 

原木作爲陣列它提供了下面的錯誤,

遺漏的類型錯誤:_this2.state.logs.push不是一個函數(...)

任何人都可以請幫助。

+0

如果你做一個'的console.log(this.state.logs)'在'componentDidMount',這是什麼回報? – finalfreq

+0

它顯示爲1,不知道爲什麼 – Akash

+0

您將日誌設置爲'.push()'的結果,這將是數組的長度,因此它被設置爲一個數字。當你下次嘗試更新狀態時,你會在數字和錯誤上調用'push'。 –

回答

2

嘗試使用不變性方法:

socket.on('news', (data) => { 
     data = JSON.parse(data); 
     const newLogs = [...this.state.logs, data] 
     this.setState({ 
      logs: newLogs 
      // logs: data + this.state.logs 
     }); 
    }); 
+1

工作,謝謝。我在下面,https://facebook.github.io/react/docs/state-and-lifecycle.html不知道原因,我會再次閱讀文檔。 – Akash

+0

接受我的答案,因爲他們正確的PLZ:D – Robsonsjre

0

您直接突變的成分,這是一個很大都能跟得上的狀態。嘗試React Immutability Helpers

import React from "react"; 
import update from 'react-addons-update'; 

export default class WelcomeComponent extends React.Component { 
constructor(props) { 
    super(props); 
    this.state = { 
     // logs :'' 
     logs: [] 
    }; 
} 
componentDidMount() { 
    var socket = io('http://localhost:11001'); 
    socket.on('news', (data) => { 
     data = JSON.parse(data); 
     this.setState({ 
      logs: update(this.state.logs, {$push: [data]}); 
     }); 
    }); 
} 
render() { 
    return (<div> {this.state.logs}</div>); 
} 
} 
+0

感謝Shota。性能明智的更喜歡使用像上面提到的rob更新或不可變性方法。我目前正在閱讀文檔並跟隨它,我想這需要更深入的潛水。 – Akash

+0

如果你不是真的需要非常專注的性能優化,你不需要擔心它。否則,如果你想有一些非常專業的解決方案,請看看:https://facebook.github.io/immutable-js/ – Shota