https://zenn.dev/terrierscript/articles/2018-10-24-react-children
children
Reactのchildrenを使うことで、子要素をwrapするような子要素を記述することが出来る。railsのviewで言えばyieldみたいなもの。
const SomeLabel = ({children}) => {
return <div>{children}</div>
}
// 呼び出し側
<SomeLabel>
// 子要素の拡張に対して、`SomeLabel`は関心を持たなくて良い。
<SomeDecoration>Hello</SomeDecoration><SomeLabel>
これを覚えるとだいぶReactをきれいに書きやすくなるイメージがある。
例えば何かtitle, author,bodyを貰って記事を表示するような<Post>
を考える。
<Post title={"aaa"} author={"bob"} body={"ほげほげ"} />
ここでは一番単位の大きそうなbody
をメインのchildren
とすること考えてみる。
<Post title={"aaa"} author={"bob"} >
<div>ほげほげ</div></Post>
このままだと、bodyの部分は加工がしやすくなったが、title
を加工するならどうするか?ということを考える。
一番ライトな手法。
呼び出し側は若干辛いが、そのままでも加工は出来る。
const MyPost = () => (
<Post title={<BazDecorate>Titleですよ</BazDecorate>} author="bob">
<FooDecorate>ほげ</FooDecorate>
</Post>
)
const Post = ({title, author, children}) => {
return <div>
<div>{title} : {author}</div>
<div>{children}</div>
</div>
}
titleの部分を切り出す事で多少見栄えはマシになる。 パフォーマンスは悪そう。
const MyPost = () => {
const titleNode = (<BazDecorate>Titleですよ</BazDecorate>)
return <Post title={titleNode} author="bob">
<FooDecorate>ほげ</FooDecorate>
</Post>
}