我很难理解Facebook的React JS框架中的上下文如何工作。
当将规范传递给React.createClass时,某些方法(特别是事件处理程序)似乎需要使用React.autoBind来“绑定到组件的回调”。其他方法(特别是render())没有这个要求,但仍然乐于引用'this.props'或'this.state'。
如果render()方法不是组件,那么'this'的上下文是什么?
答案 0 :(得分:3)
那是因为他们对autoBind
等内部方法已经render
了。实际上,如果您致电autoBind
并传递这些方法,则会收到错误。
对于自定义方法,最初的想法是您可能希望坚持要分配的任何上下文,但这在0.4.x(http://facebook.github.io/react/blog/2013/07/02/react-v0-4-autobind-by-default.html)中已更改。
基本上因为绑定this
大部分时间都是你想要的,从现在起createClass
中的每个方法现在默认为autoBind
。
答案 1 :(得分:0)
在任何组件框架中(不仅仅是反应),事件处理程序需要手动管理this
引用,因为它们作为回调函数注册到DOM中,而不是方法。在react 0.3中你可以自己绑定this
引用,或者你可以使用效率更高的React.autoBind
。在React 0.4中,所有事件处理程序在进入DOM的过程中都受到框架的约束,因此您不必再考虑它了。
因此this
引用始终是对反应组件实例的引用。
答案 2 :(得分:0)
ReactJs中的当前上下文是ReactJs的一个新钩子(自v16.6.3起)。它旨在将属性向下传递到组件树,而无需对父元素中的每个嵌套元素进行硬编码。基本示例:
// Design context
const DesignContext = React.createContext({background: 'light'});
// User context
const UserContext = React.createContext({
name: 'NewUser',
});
// A component may consume multiple contexts
function Content() {
return (
<DesignContext.Consumer>
{background => (
<UserContext.Consumer>
{user => (
<ProfilePage user={user} background={background} />
)}
</UserContext.Consumer>
)}
</DesignContext.Consumer>
);
}