在props中传递函数是不确定的

Ark*_*kon 5 javascript react-native react-native-android

尝试将功能传递给子组件时,该功能未定义。实际上,我什至不能在我的课堂上直接执行它。您认为有错字吗?

class FriendsPage extends Component {
  constructor(props){
    super(props);
    this.mylog = this.mylog.bind(this);
  }
  mylog(){
        console.log("test debug");
  }
  renderItem(item) {
      return (<User friend={item} key={item.id} mylog={this.mylog}/>);
  }

class User extends Component {
  constructor(props){
    super(props);
  }
  render() {
      this.props.mylog(); // <== This is undefined
    ...
  }
Run Code Online (Sandbox Code Playgroud)

Pan*_*kaj 2

工作正常。但如果您尝试在任何其他位置渲染<User />而不prop命名mylog,它将是未定义的。

class FriendsPage extends React.Component {
    constructor(props) {
      super(props);
      this.mylog = this.mylog.bind(this);
    }
    mylog() {
      console.log("test debug");
    }
    render() {
      return ( < User mylog = {
          this.mylog
        }
        />);
      }
    }
    class User extends React.Component {
      constructor(props) {
        super(props);
      }
      render() {
        this.props.mylog();
        return <h1 > Hello < /h1>;
      }

    }

    ReactDOM.render( < FriendsPage / > , document.getElementById('root'));
Run Code Online (Sandbox Code Playgroud)
<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="root"></div>
Run Code Online (Sandbox Code Playgroud)

  • 谢谢它有效。实际上我的问题是我在“render”函数中包装了一个名为“renderItem”的函数,并将其绑定在构造函数中。由于某种原因,它起作用了。 (2认同)