react render props模式实现组件复用示例

 更新时间:2022年07月22日 09:25:24   作者:梨轻巧  
本文主要介绍了react render props模式实现组件复用示例,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧

一 render props的使用步骤

1 创建要复用的组件,在组件中提供要复用的状态逻辑代码
2 将要复用的state作为方法的参数,暴露到组件外部

import React from "react";
import ReactDOM from "react-dom";
 
class App extends React.Component {
 
    render() {
        return <Mouse show={(mouse)=><p>鼠标所在位置:{mouse.x},{mouse.y}</p>}/>
    }
 
}
 
//1 创建要复用的组件,在组件中提供要复用的状态逻辑代码
class Mouse extends React.Component {
 
    state = {
        x: 0,
        y: 0
    }
 
    //监听鼠标移动时间
    componentDidMount() {
        window.addEventListener("mousemove", this.handleMouseMove)
    }
 
    //鼠标移动的事件处理
    handleMouseMove = e => {
        this.setState({
            x: e.clientX,
            y: e.clientY
        })
    }
 
    render() {
        //2 将要复用的state作为方法的参数,暴露到组件外部
        return this.props.show(this.state)
    }
}
 
ReactDOM.render(<App/>, document.getElementById("root"));

效果

二 组件的复用

实现鼠标移动,图片移动

import imgage from "./images/cat2.gif"
 
class App extends React.Component {
 
    render() {
        return <Mouse show={mouse => {
            return <img src={imgage} alt='猫' style={{
                position: 'absolute',
                // 为了让鼠标在图片的中间,top减掉了图片的一半高度,left减掉了图片一半的宽度
                top: mouse.y-198,
                left: mouse.x-250
            }}/>
        }}></Mouse>
    }
}

效果:图片跟着鼠标走

完整代码

import React from "react";
import ReactDOM from "react-dom";
import imgage from "./images/cat2.gif"
 
class App extends React.Component {
 
    render() {
        return <Mouse show={mouse => {
            return <img src={imgage} alt='猫' style={{
                position: 'absolute',
                // 为了让鼠标在图片的中间,top减掉了图片的一半高度,left减掉了图片一半的宽度
                top: mouse.y-198,
                left: mouse.x-250
            }}/>
        }}></Mouse>
    }
}
 
//1 创建要复用的组件,在组件中提供要复用的状态逻辑代码
class Mouse extends React.Component {
 
    state = {
        x: 0,
        y: 0
    }
 
    //监听鼠标移动时间
    componentDidMount() {
        window.addEventListener("mousemove", this.handleMouseMove)
    }
 
    //鼠标移动的事件处理
    handleMouseMove = e => {
        this.setState({
            x: e.clientX,
            y: e.clientY
        })
    }
 
    render() {
        //2 将要复用的state作为方法的参数,暴露到组件外部
        return this.props.show(this.state)
    }
}
 
ReactDOM.render(<App/>, document.getElementById("root")
);

三 使用children名代替属性

 代码

import React from "react";
import ReactDOM from "react-dom";
import imgage from "./images/cat2.gif"
 
class App extends React.Component {
 
    render() {
        return <Mouse>
            {mouse => {
                return <img src={imgage} alt='猫' style={{
                    position: 'absolute',
                    // 为了让鼠标在图片的中间,top减掉了图片的一半高度,left减掉了图片一半的宽度
                    top: mouse.y - 198,
                    left: mouse.x - 250
                }}/>
            }}
        </Mouse>
    }
}
 
//1 创建要复用的组件,在组件中提供要复用的状态逻辑代码
class Mouse extends React.Component {
 
    state = {
        x: 0,
        y: 0
    }
 
    //监听鼠标移动时间
    componentDidMount() {
        window.addEventListener("mousemove", this.handleMouseMove)
    }
 
    //鼠标移动的事件处理
    handleMouseMove = e => {
        this.setState({
            x: e.clientX,
            y: e.clientY
        })
    }
 
    render() {
        //2 将要复用的state作为方法的参数,暴露到组件外部
        return this.props.children(this.state)
    }
}
 
ReactDOM.render(<App/>, document.getElementById("root")
);

 到此这篇关于react render props模式实现组件复用示例的文章就介绍到这了,更多相关react render props组件复用内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • 一文带你掌握React类式组件中setState的应用

    一文带你掌握React类式组件中setState的应用

    这篇文章主要为大家详细介绍了介绍了React类式组件中setState的三种写法以及简单讨论下setState 到底是同步的还是异步的,感兴趣的可以了解下
    2024-02-02
  • 详解React Native顶|底部导航使用小技巧

    详解React Native顶|底部导航使用小技巧

    本篇文章主要介绍了详解React Native顶|底部导航使用小技巧 ,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-09-09
  • React中props使用教程

    React中props使用教程

    props是组件(包括函数组件和class组件)间的内置属性,用其可以传递数据给子节点,props用来传递参数。组件实例化过程中,你可以向其中传递一个参数,这个参数会在实例化过程中被引用
    2022-09-09
  • react项目中如何引入国际化

    react项目中如何引入国际化

    在React项目中引入国际化可以使用第三方库来实现,本文主要介绍了react项目中如何引入国际化,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-07-07
  • react-redux的connect与React.forwardRef结合ref失效的解决

    react-redux的connect与React.forwardRef结合ref失效的解决

    这篇文章主要介绍了react-redux的connect与React.forwardRef结合ref失效的解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-05-05
  • 解决React hook 'useState' cannot be called in a class component报错

    解决React hook 'useState' cannot be called in 

    这篇文章主要为大家介绍了React hook 'useState' cannot be called in a class component报错解决方法,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2022-12-12
  • React 正确使用useCallback useMemo的方式

    React 正确使用useCallback useMemo的方式

    这篇文章主要介绍了React 正确使用useCallback useMemo的方式,文章围绕主题展开详细的内容介绍,具有一定的参考价值,需要的朋友可以参考一下
    2022-08-08
  • React 性能优化之非必要的渲染问题解决

    React 性能优化之非必要的渲染问题解决

    本文主要介绍了React 性能优化之非必要的渲染问题解决,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-07-07
  • React18之update流程从零实现详解

    React18之update流程从零实现详解

    这篇文章主要为大家介绍了React18之update流程从零实现详解,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-01-01
  • 重新理解 React useRef原理

    重新理解 React useRef原理

    这篇文章主要为大家介绍了React useRef原理的深入理解分析,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪
    2023-05-05

最新评论