2017-04-27 16 views
1

複数のチャットルームのソケットからデータを取得しようとしています。私は(event.dataを使用して)データを記録することができましたが、返品のデータを表すのに問題があります。ソケットから複数の値を反復処理する方法

私は2つのマップ(チャットルーム名を取得するために1つ、メッセージのリストを取得するために1つ)を使用してみました。これはどのように達成されますか?

const MessageSocket = new WebSocket('ws://localhost:8000/chat'); 

class Chat extends Component { 
    constructor(props) { 
    super(props); 
    this.state = { 
     data: [] 
    }; 
    } 

    componentWillMount() { 
    MessageSocket.addEventListener('message', event => { 
     console.log('one at a time', event.data) 
     this.setState(prev => { 
     return { 
      data: { ...prev.data, ...event.data } 
     } 
     }); 
     const values = Object.values(JSON.parse(event.data)) 
     console.log(values) 
    }); 
    } 

    render() { 
    return (
     <div> 
      The room title is: {values.map(e => <h2>{values}</h2>)} 
     </div> 
    ); 
    } 
} 

データ(それは個々にそれぞれconsole.logs)

{ 
    "Room 1": [{ 
    "pk": 1, 
    "message": "Hi", 
    "handle": "Foo", 
    }, { 
    "pk": 2, 
    "message": "Hello", 
    "handle": "Bar", 
    }] 
} 

別のコンソール・ログ・エントリ

{ 
    "Room 2": [{ 
    "pk": 1, 
    "message": "See ya", 
    "handle": "Bob", 
    }, { 
    "pk": 2, 
    "message": "Laters", 
    "handle": "Pete", 
    }] 
} 
+0

レンダリング関数のスコープに変数 'values'がありません。また、マップ関数は何もマッピングしていないので、各繰り返しで 'values'を出力しようとしています。 –

+0

それを使用する方法の例を提供してください – Ycon

答えて

0

const values = …、ローカル変数を割り当てます。あなたはそれをちょうどrender()で参照することはできません。 componentWillMount()からrender()に何かを使用するには、setState({foo: something})にそれを渡し、this.state.fooでアクセスする必要があります。

+0

しかし、私はcomponentWillMount内でthis.SetStateを使用しています。 'this.state.data'を介してそのデータを使用しようとすると、' this.setState(prev => {return {data:{... prev.data、... event.data}} 'ヌルのプロパティ 'data'を読み取れません – Ycon

関連する問題