1、React组件复用概述
2.思路分析
3.使用步骤
4.演示Mouse组件的复用

- //React脚手架引入图片的方式
- import img from './images/open.png'
-
- class Mouse extends React.Component{
-
- state={
- x:0,
- y:0
- }
-
-
- handleMouseMouve= e=>{
- this.setState({
- x:e.clientX,//实时获得鼠标的位置
- y:e.clientY,
- })
- }
-
- //监听鼠标移动事件
- componentDidMount(){
- window.addEventListener('mousemove',this.handleMouseMouve)
- }
-
- render(){
- return(
- this.props.render(this.state)
- )
- }
- }
-
- class App extends React.Component{
- render(){
- return(
- <div>
- <h1>render props模式h1>
- <Mouse
- render={mouse => {//感觉有点像回调函数
- return(
- <p>
- 鼠标的位置:x:{mouse.x} y:{mouse.y}
- p>
- )
- }
-
- }
- >Mouse>
-
-
- {/* 移动图片 */}
- <Mouse
- render={
- mouse=>{
- return(
- <img
- src={img}
- alt='open'
- style={{
- position:'absolute',
- top:mouse.y-16,
- left:mouse.x-32
- }}
- />
- )
- }
- }
- >
-
- Mouse>
- div>
- )
- }
- }
-
-
- ReactDOM.render(<App/>,
-
- document.getElementById('root'))
5.children代替render属性(推荐使用)
//context中的用法:
{data=>data参数表示接收到的数据---data}
- class App extends React.Component{
- render(){
- return(
-
- <h1>render props模式h1>
- <Mouse >
- {
- mouse=>{
- return(
- <p>
- mouse position:{mouse.x},{mouse.y}
- p>
- )
- }
- }
- Mouse>
6.代码优化
- 推荐:给render props模式添加props校验
- 应该在卸载时解除mousemove事件绑定
- Mouse.propTypes={
- children:PropTypes.func.isRequired
- }
-
-
- //解除绑定
- componentWillUnmount(){
- window.removeEventListener('mousemove',this.handleMouseMouve)
- }
-
-
关于propType报错可参考文章:http://t.csdn.cn/nQtzz