Mam do czynienia z naprawdę irytującym zachowaniem w React. Chciałbym przekazać kontekst z komponentu nadrzędnego do komponentu potomnego przy użyciu getChildContext
. Wszystko działa dobrze, o ile nie używam {this.props.children}
w funkcji renderowania. Jeśli to zrobię, kontekst komponentu potomnego jest niezdefiniowany.Kontekst reakcyjny jest niezdefiniowany, gdy dzieci są renderowane przy użyciu tego.props.children
Załączam przykład kodu, który odtwarza to zachowanie. Nie mogę się dowiedzieć, dlaczego kontekst komponentu jest kontekstem komponentu Baz
, to jest .
var Baz = React.createClass({
contextTypes: {
bar: React.PropTypes.any
},
render: function() {
console.log(this.context);
return <div />;
}
});
var Bar = React.createClass({
childContextTypes: {
bar: React.PropTypes.any
},
getChildContext: function() {
return {
bar: "BAR"
};
},
render: function() {
return (<div>{this.props.children}</div>);
}
});
var Foo = React.createClass({
render: function() {
return <Bar>
<Baz />
</Bar>;
}
});
console.log(React.version);
React.render(<Foo />, document.body);
konsoli wyjściowa:
Warning: owner-based and parent-based contexts differ (values: `undefined` vs `BAR`) for key (bar) while mounting Baz (see: http://fb.me/react-context-by-parent)
Inline JSX script:10 Object {bar: undefined}
JSFiddle: https://jsfiddle.net/3h7pxnkx/1/
Wystarczy zauważyć, że, jako ostrzeżenie wskazuje, plan jest, że takie zachowanie będzie się zmieniać w React v0.14 tak, że 'Baz' otrzyma swój kontekst z nadrzędnego' Bar' zamiast swojego właściciela 'Foo'. –