通过React Router传递函数

时间:2017-05-22 15:11:53

标签: reactjs react-router

我想通过React Router将函数传递给子组件。我尝试了以下但它似乎不起作用。

class App extends Component {
  constructor(props) {
      super(props)
  }

  render() {
    return (
      <div className="App">
          <div className="content">
          <div className="centered-wrapper">
            <Switch>
              <Route exact path="/" component={Welcome} />
              <Route path="/life" render={props => <Life sayHello = {this.sayHello()} />} />
            </Switch>
          </div>                
      </div>
    );
  }
}

export default App;

我想在Life组件中调用sayHello(),如下所示:

<div className="hello">{ this.props.sayHello() } I'm <Link to="/life">Marco</Link>! Welcome to my hood.</div>

2 个答案:

答案 0 :(得分:10)

替换:

<Route path="/life" render={props => <Life sayHello = {this.sayHello()} />} />

<Route path="/life" render={props => <Life sayHello = {this.sayHello} />} />

错误道具接收sayHello()函数调用的结果而不是函数本身。

答案 1 :(得分:3)

不是传递函数,而是调用它并将返回的结果作为prop传递。

sayHello    // function object
sayHello()  // function call, evaluates to return

删除括号:

render={props => <Life sayHello={this.sayHello} />}

将来,请查看您在控制台中看到的任何错误,并将其添加到您的问题中。如果您尝试在sayHello组件中调用Life,请务必看到类似于此错误的错误:

Uncaught TypeError: undefined is not a function

有了这些信息,您可以自己找到问题,或者让任何想要帮助的人更清楚:)