javascript - 将参数传递给另一个组件时出错

标签 javascript reactjs autobahn

这个问题真的让我很困惑,当连接打开并且我控制台日志 session 工作正常时,我得到了数据,但是当我尝试将 session 传递到调用函数之外并在组件渲染中控制台 sessionVar 时,我未获取数据

import React, {Component} from 'react';
import autobahn from 'autobahn';

let sessionVar = undefined
class App extends Component {

    componentWillMount() {
       this.Call();
     }
    Call = () => {
      var connection = new autobahn.Connection({ url: 'ws://127.0.0.1:9000/', realm: 'realm1' });

      connection.onopen = function (session) {
        console.log(session, 'This show data when component mount')
        sessionVar = session
      };

    connection.open();
  }
  render() {
    console.log(sessionVar, 'Im getting undefined')
    return (
      <div>
        <Two session={sessionVar} />
      </div>
    )
  }
}

export default App;

最佳答案

改用state。请参阅docs about React state

const Two = (props) => <h1>{props.session}</h1>

class App extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      sessionVar: undefined
    }
  }

  componentWillMount() {
    this.call()
  }
  
  call = () => {
    // Do you fetch session related stuff as normal
    let session = 'session fetched'
    // simulate a delay due to connection
    setTimeout(() => {
      this.setState({
        sessionVar: session
      }); // setState triggers rerendering
    }, 1000);
  }
  render() {
    return (
      <div>
        <Two session={this.state.sessionVar} />
      </div>
    )
  }
}

ReactDOM.render(<App />, document.getElementById('app'))
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.1.0/react-dom.min.js"></script>
<div id="app"></div>

关于javascript - 将参数传递给另一个组件时出错,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49263030/

相关文章:

javascript - 从 React 中的 e.currentTarget 向上移动 DOM 树时,parentNode 为空

javascript - 将图像 URL 转换为 dataURL - Javascript

javascript - 从子组件更改父组件状态

android - 如何在 AutobahnConnection android 中传递领域?

javascript - 如何创建 Bootstrap Popover 关闭选项

javascript - 如何在 Angularjs 中将对象插入数组的数组中

javascript/jquery 忽略或覆盖 :hover style

javascript - 获取宽度值 :auto

python - 使用 tac 文件与 twistd 一起运行时出现高速公路 websocket 问题

python - 在 crossbar autobahn 上订阅 python 主题