介绍
在react官方文档的高级指引中有一页Render Props
的文档,作为一个react初学者对这个概念浅薄的理解有点像vue中
常用的对组件使用props传入一个回调函数 ,则可以通过回调函数在组件外部拿到组件内部的数据的一个操作
例子
Mouse.tsx文件如下
File:Mouse.tsx1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
| import { useState } from 'react';
function Mouse(props) { const [position, setPosition] = useState({ x: 0, y: 0, });
const handleMouseMove = (e) => { setPosition({ x: e.clientX, y: e.clientY, }); };
const { render } = props; return ( <div className="mouse" onMouseMove={handleMouseMove}> <div className="mouse-position"> {position.x},{position.y} </div> {render(position)} </div> ); } export default Mouse;
|
Cat.tsx文件如下
File: Cat.tsx1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| import React, { Fragment } from 'react'; function Cat(props) { const { mouse } = props;
return ( <Fragment> <div className="cat-box" style={{ position: 'absolute', left: mouse.x, top: mouse.y, }} ></div> </Fragment> ); } export default Cat;
|
App.tsx调用代码
关键代码在第五行,render是一个函数传给了Mouse,在Mouse内部调用了这个render
File:App.tsx1 2 3 4 5 6 7 8 9
| function App() { return ( <div className="App"> <Mouse render={(mouse: any) => <Cat mouse={mouse} />}></Mouse> </div> ); }
|