問題一覧に戻る
上級高度なパターンと型
問題90: レンダープロップス
コンポーネント間でコードを共有するレンダープロップスパターンを学びます。React要素を返す関数をpropとして渡します。これにより柔軟な合成とコード再利用が可能になります。関数はコンポーネントからデータを受け取り、どのようにレンダリングするかを決定します。より明示的なデータフローを持つHOCの代替手段です。
import React, { useState } from 'react';
{/* render propを持つコンポーネント */}
function Mouse({ }) {
const [pos, setPos] = useState({ x: 0, y: 0 });
const handleMove = (e) => {
setPos({ x: e.clientX, y: e.clientY });
};
return (
<div onMouseMove={handleMove} style={{ height: '200px' }}>
{/* render関数を呼び出し */}
{(pos)}
</div>
);
}
function App() {
return (
{/* render関数を渡す */}
<Mouse ={({ x, y }) => (
<p>Mouse: {x}, {y}</p>
)} />
);
}
{/* 関数としてのchildren */}
function Cat() {
return (
<Mouse>
{({ x, y }) => (
<div style={{ position: 'absolute', left: x, top: y }}>
🐱
</div>
)}
</>
);
}
export default App;