react render props模式實(shí)現(xiàn)組件復(fù)用示例
一 render props的使用步驟
1 創(chuàng)建要復(fù)用的組件,在組件中提供要復(fù)用的狀態(tài)邏輯代碼
2 將要復(fù)用的state作為方法的參數(shù),暴露到組件外部
import React from "react"; import ReactDOM from "react-dom"; class App extends React.Component { render() { return <Mouse show={(mouse)=><p>鼠標(biāo)所在位置:{mouse.x},{mouse.y}</p>}/> } } //1 創(chuàng)建要復(fù)用的組件,在組件中提供要復(fù)用的狀態(tài)邏輯代碼 class Mouse extends React.Component { state = { x: 0, y: 0 } //監(jiān)聽鼠標(biāo)移動(dòng)時(shí)間 componentDidMount() { window.addEventListener("mousemove", this.handleMouseMove) } //鼠標(biāo)移動(dòng)的事件處理 handleMouseMove = e => { this.setState({ x: e.clientX, y: e.clientY }) } render() { //2 將要復(fù)用的state作為方法的參數(shù),暴露到組件外部 return this.props.show(this.state) } } ReactDOM.render(<App/>, document.getElementById("root"));
效果
二 組件的復(fù)用
實(shí)現(xiàn)鼠標(biāo)移動(dòng),圖片移動(dòng)
import imgage from "./images/cat2.gif" class App extends React.Component { render() { return <Mouse show={mouse => { return <img src={imgage} alt='貓' style={{ position: 'absolute', // 為了讓鼠標(biāo)在圖片的中間,top減掉了圖片的一半高度,left減掉了圖片一半的寬度 top: mouse.y-198, left: mouse.x-250 }}/> }}></Mouse> } }
效果:圖片跟著鼠標(biāo)走
完整代碼
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', // 為了讓鼠標(biāo)在圖片的中間,top減掉了圖片的一半高度,left減掉了圖片一半的寬度 top: mouse.y-198, left: mouse.x-250 }}/> }}></Mouse> } } //1 創(chuàng)建要復(fù)用的組件,在組件中提供要復(fù)用的狀態(tài)邏輯代碼 class Mouse extends React.Component { state = { x: 0, y: 0 } //監(jiān)聽鼠標(biāo)移動(dòng)時(shí)間 componentDidMount() { window.addEventListener("mousemove", this.handleMouseMove) } //鼠標(biāo)移動(dòng)的事件處理 handleMouseMove = e => { this.setState({ x: e.clientX, y: e.clientY }) } render() { //2 將要復(fù)用的state作為方法的參數(shù),暴露到組件外部 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', // 為了讓鼠標(biāo)在圖片的中間,top減掉了圖片的一半高度,left減掉了圖片一半的寬度 top: mouse.y - 198, left: mouse.x - 250 }}/> }} </Mouse> } } //1 創(chuàng)建要復(fù)用的組件,在組件中提供要復(fù)用的狀態(tài)邏輯代碼 class Mouse extends React.Component { state = { x: 0, y: 0 } //監(jiān)聽鼠標(biāo)移動(dòng)時(shí)間 componentDidMount() { window.addEventListener("mousemove", this.handleMouseMove) } //鼠標(biāo)移動(dòng)的事件處理 handleMouseMove = e => { this.setState({ x: e.clientX, y: e.clientY }) } render() { //2 將要復(fù)用的state作為方法的參數(shù),暴露到組件外部 return this.props.children(this.state) } } ReactDOM.render(<App/>, document.getElementById("root") );
到此這篇關(guān)于react render props模式實(shí)現(xiàn)組件復(fù)用示例的文章就介紹到這了,更多相關(guān)react render props組件復(fù)用內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
React Native之prop-types進(jìn)行屬性確認(rèn)詳解
本篇文章主要介紹了React Native之prop-types進(jìn)行屬性確認(rèn)詳解,小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2017-12-12React項(xiàng)目配置prettier和eslint的方法
這篇文章主要介紹了React項(xiàng)目配置prettier和eslint的相關(guān)知識(shí),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2022-06-06詳解基于React.js和Node.js的SSR實(shí)現(xiàn)方案
這篇文章主要介紹了詳解基于React.js和Node.js的SSR實(shí)現(xiàn)方案,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-03-03React18+TS通用后臺(tái)管理系統(tǒng)解決方案落地實(shí)戰(zhàn)示例
這篇文章主要為大家介紹了React18+TS通用后臺(tái)管理系統(tǒng)解決方案落地實(shí)戰(zhàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2023-08-08react-beautiful-dnd 實(shí)現(xiàn)組件拖拽功能
這篇文章主要介紹了react-beautiful-dnd 實(shí)現(xiàn)組件拖拽功能,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2021-08-08React項(xiàng)目搭建與Echarts工具使用詳解
這篇文章主要介紹了React項(xiàng)目搭建與Echarts工具使用詳解,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-03-03