【问题标题】:pass function argument to another component reactjs将函数参数传递给另一个组件 reactjs
【发布时间】:2018-03-13 15:29:46
【问题描述】:

我正在使用 AutobahnJS 我不知道如何在另一个组件中使用相同的连接。

我决定通过将 session 参数传递给像这样的另一个组件来手动完成,但这不起作用我不知道为什么

主要组件:

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 Pass (session) {
      console.log(session, 'This I want to use it in anothr component')
    };

    connection.open();
  }
  render() {
    return (
        <div>
        <Two Pass={this.Pass} />
        </div>
    )
  }
}

export default App;

子组件

class Two extends Component {

this.props.Pass(session); // if I console.log session will get error
//How to console log session here

  render() {
    return (
        <div>
       Child component
        </div>
    )
  }
}

export default Two;

在另一个组件中使用相同的高速公路连接(会话)的最佳方式是什么?

更新

class App extends Component {
  constructor(props) {
    super(props);
    this.state = {
      pageNumber: 1
    }
    this.sessionVar = this.sessionVar.bind(this)
  }

【问题讨论】:

    标签: javascript reactjs autobahn


    【解决方案1】:

    也许你可以试试这样的:

    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 Pass (session) {
          console.log(session, 'This I want to use it in anothr component')
          sessionVar = session
        };
    
        connection.open();
      }
      render() {
        return (
            <div>
            <Two Pass={this.Pass} session={sessionVar} />
            </div>
        )
      }
    }
    

    你也可以使用 state,看起来像这样可能会更容易:

      Call = () => {
        var connection = new autobahn.Connection({ url: 'ws://127.0.0.1:9000/', realm: 'realm1' });
    
        connection.onopen = function Pass (session) {
          console.log(session, 'This I want to use it in anothr component')
          this.setState({session})
        };
    
        connection.open();
      }
      render() {
        return (
            <div>
            <Two session={this.state.session} />
            </div>
        )
      }
    }
    

    然后你可以在你的子组件中这样做:

    class Two extends Component {
    componentDidMount(){
    console.log(this.props.session)
    
    }
    
      render() {
        return (
            <div>
           Child component
            </div>
        )
      }
    }
    
    export default Two;
    

    【讨论】:

    • 如果我把 let sessionVar 放到 Call 函数之外,我会得到 Failed to compile 如果我把 let sessionVar 放到 Call 函数中,我会得到 sessionVar is not defined 请帮忙
    • 怎么样?要截图吗?
    • 我真的不知道为什么 Pass 函数中的 This.setState 无法在 console.log 中没有错误的情况下工作
    • 确定截图或将错误粘贴到此处,顺便说一句,它是“this”,小写“T”
    • 如果我把 let sessionVar 放在 call 函数里面没问题,但我得到的是来自 &lt;Two session={sessionVar} /&gt;undefind sessionVar
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-09-25
    • 2020-10-03
    • 1970-01-01
    • 1970-01-01
    • 2020-09-10
    • 2014-01-06
    相关资源
    最近更新 更多