react render props模式實現(xiàn)組件復用示例
一 render props的使用步驟
1 創(chuàng)建要復用的組件,在組件中提供要復用的狀態(tài)邏輯代碼
2 將要復用的state作為方法的參數(shù),暴露到組件外部
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 創(chuàng)建要復用的組件,在組件中提供要復用的狀態(tài)邏輯代碼
class Mouse extends React.Component {
state = {
x: 0,
y: 0
}
//監(jiān)聽鼠標移動時間
componentDidMount() {
window.addEventListener("mousemove", this.handleMouseMove)
}
//鼠標移動的事件處理
handleMouseMove = e => {
this.setState({
x: e.clientX,
y: e.clientY
})
}
render() {
//2 將要復用的state作為方法的參數(shù),暴露到組件外部
return this.props.show(this.state)
}
}
ReactDOM.render(<App/>, document.getElementById("root"));效果



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

