子供を反復するときに、その小道具を調べることができます。たとえば、あなたは上記の持っているforEach
方法を使用して、あなたはこのような何かを行うことができます:
withX: function() {
var counter = 0;
React.Children.forEach(this.props.children, function(child) {
if (child.props.isX) counter++;
});
return counter;
}
を反応させるのも、あなたは素敵な配列のメソッドのJSを提供して使用して同じことを行うことができますtoArray
helperを提供しています。
return React.Children.toArray(this.props.children).filter(function(child) {
return child.props.isX;
}).length;
あなたはES6を使用している場合は、矢印の機能をかなり簡潔にこれを行うことができます。
return React.Children.toArray(this.props.children).filter(c => c.props.isX).length;
唯一の難点があり、その場合Outer
がカウントを行っている場合は、Outer
もh4
をレンダリングする必要があります。ここでは完全な例です:
const App = React.createClass({
render() {
return (
<Outer title="Things">
<Inner isX/>
<Inner isX/>
<Inner/>
<Inner/>
</Outer>
);
}
});
const Outer = React.createClass({
getInitialState() {
return {
total: React.Children.count(this.props.children),
withX: this.countChildrenWithX(this.props.children)
};
},
countChildrenWithX(children) {
const { toArray } = React.Children;
return toArray(children).filter(c => c.props.isX).length;
},
render() {
return (
<div>
<h4>{this.props.title} ({this.state.withX}/{this.state.total})</h4>
<hr />
{this.props.children}
</div>
);
}
});
const Inner = React.createClass({
render() {
return <div>Inner - withX = {String(!!this.props.isX)}</div>;
}
});
そしてhere's a working JS Binは発揮しますhttps://jsbin.com/xameyun/edit?js,output
ハァ!それは素晴らしい答えです。ありがとう、非常に有益です。私は正しい方向で考えていたことを嬉しく思う。私はあなたが同じことを達成するための様々な方法を示してくれて非常にうれしいです。 ES6の構文は完璧です。 –