# Render Props

具有 render prop 的组件接受一个返回 React 元素的函数,并在组件内部通过调用此函数来实现自己的渲染逻辑.

// 1. 具有公共逻辑的Mouse
class Mouse extends React.Component {
  constructor(props){
    super(props);
    this.state = {x:0,y:0};
  }

  handleMouseMove = (event) => {
    this.setState({
      x: event.clientX,
      y: event.clientY
    })
  }

  render() {
    return (
      <div onMouseMove={this.handleMouseMove}>
        {/* 2. 根据传入的render函数, 来显示不同的内容*/}
        {this.props.render(this.state)}
      </div>
    );
  }
}



const App = (props)=>{
  return (
    <div>
      <Mouse render={
         /* render 是一个函数组件 */
          ({ x, y }) => <h1>The mouse position is ({x}, {y})</h1>
      } 
      />
    </div>
  )
}

export default App;

# 实际应用

react-router 中的 Route组件中的render属性

// convenient inline rendering
ReactDOM.render(
  <Router>
    <Route path="/home" render={() => <div>Home</div>} />
  </Router>,
  node
);