此刻,我学习了如何使用react context API。
我有一个react Provider类,在value={}
中有一些状态数据和功能。如何从该值内的另一个函数访问该值内的函数?
因此,function1()
由子组件调用。状态更改完成后,我想调用function2()
并访问新状态。
有可能做出这样的反应吗?:
class Provider extends Component {
state = {
foo: 'bar'
}
render() {
return() {
<Context.Provider value={{
state: this.state,
function1: () => {
this.setState({ foo: 'changed' }, () => {
// HERE I WANT TO CALL THE NEXT FUNCTION IN THIS VALUE
this.function2()
});
},
function2: () => {
// called by function1 after state change
console.log(this.state)
}
}}>
{ this.props.children }
</Context.Provider>
}
}
}
如果我尝试运行此命令并从孩子那里解雇function1()
,它会给我
TypeError: _this2.function2() is not a function
我不明白,为什么它要尝试访问_this2
变量,因为我将其定义为访问this.function2()
。
难道我无法做我想做的事情吗?您可能会说,为什么function2()
是一个额外的函数,以及为什么我不在function1()
的末尾添加代码。这是因为function2()
必须是一个独立的可访问函数。
有人可以帮助我吗?谢谢!
答案 0 :(得分:1)
您可以尝试执行以下操作:-
class Provider extends Component {
state = {
foo: 'bar'
}
an_independent_function() {
console.log(this.state);
}
render() {
return() {
<Context.Provider value={{
state: this.state,
function1: () => {
this.setState({ foo: 'changed' }, () => {
// HERE I WANT TO CALL THE NEXT FUNCTION IN THIS VALUE
this.an_independent_function();
});
},
function2: this.an_independent_function.bind(this)
}}>
{ this.props.children }
</Context.Provider>
}
}
}