私はthis.props.children
のclassName propを更新したいコンポーネントを作成しています。React:this.props.childrenのclassNameを更新してください
これを達成するには、React.Children
ユーティリティを使用しています。 React.Children.map(children)
子から新しい配列を作成し、React.cloneElement(child)
子プロップを操作します。
map
およびcloneElement
はいくつかの点で機能します。 props
を追加して、個々の要素のchildren
を変更することができます。しかし、props.className
は、レンダリング時に子のclass
に伝播されません。つまり、新しい子配列のprops.className
への更新が表示されますが、レンダリングされた子には新しいprops.className
が含まれていません。
これはthis.props.children
のprops.className
を更新する不正な方法ですか?もしそうなら、正しい方法は何ですか?
class List extends React.Component {
constructor(props) {
super(props);
this.items = React.Children.map(this.props.children, item => {
const className = `${item.props.className} test`;
const props = { ...item.props, className: className };
return React.cloneElement(item, props, "TEST");
});
}
render() {
console.log(this.items);
return (
<ul>
{this.items}
</ul>
);
}
}
class ListItem extends React.Component {
render() {
return (
<li className="item">
{this.props.children}
</li>
);
}
}
class Application extends React.Component {
render() {
return (
<List>
<ListItem ref="item1" className="item">A</ListItem>
<ListItem ref="item2" className="item">B</ListItem>
<ListItem ref="item3" className="item">C</ListItem>
<ListItem ref="item4" className="item">D</ListItem>
</List>
);
}
}
/*
* Render the above component into the div#app
*/
ReactDOM.render(<Application />, document.getElementById("app"));
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.0/react.min.js"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/react/15.4.0/react-dom.min.js"></script>
<div id="app"></app>
うわー、肝炎べき指摘で私に簡単にそれを取るためのおかげで
変換
<li className="item">
eは明らかな間違いでした。 –
@BrettDeWoody時には、私たちはそれを打ち倒すので、簡単な問題を逃すだけの難しい問題を解決します^^ –