If you've reached this page, it's probably because your "parent-based and owner-based contexts differ".
As we've been iterating on React's "context" feature, we've discovered that the parent-based relationship is more useful than the owner-based relationship, so we're migrating to use a parent-based hierarchy.
In short, the owner of a component is whomever creates the component, while the parent of a component is whomever would be the containing ancestor in the DOM hierarchy. To learn more about the owner relationship, see the docs here: http://facebook.github.io/react/docs/multiple-components.html
In many cases, the owner and the parent are the same node, in which case, no further action is necessary. However, if your owner and your parent differ, you should ensure that the context variables you're using aren't going to break when we switch from owner-based contexts to parent-based contexts. If you're seeing the warning, your component may not be ready for the switch.
NOTE: semantically-equal context variables... In some rare cases, you might have a getChildContext function which is not idempotent or which returns objects using value semantics. For instance, if your getChildContext() returns a random number, you might get a warning like:
Warning: owner-based and parent-based contexts differ (values: '0.91666' vs '0.37677')
...
Such cases are not necessarily a bug, but are probably bad practice. Our recommendation is that you fix these situations to ensure getChildContext returns the same value (triple equals equality) for a particular set of inputs (props/context). That said, as long as your context variables are semantically equivalent, you should be able to update to 0.14 without things breaking.
@gnapse I have been playing with your code and I think the problem isn't with
Inmutable
. I think the problem is around the way the child components are made.I've removed the loop and put directly the item list and the warning has gone away... you can see it here:
https://jsfiddle.net/b4n3wqz8/1/
So, I think the problem is located with the children
own
(orparent
, I'm not really sure). When child component creation is made directly inside therender()
it works well because theown
andparent
are well assigned to children.However, when children are made inside a function that "lost" (or something) the
render()
context, theown
or theparent
(I'm not sure which one) is lost. So, theown.context
orparent.context
is lost also and the warning is triggered because one of them isundefined
.This is my approach to the problem... however, I don't know why
own
orparent
is lost.