Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/404.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何访问react Context.Provider值中的另一个函数?_Javascript_Reactjs - Fatal编程技术网

Javascript 如何访问react Context.Provider值中的另一个函数?

Javascript 如何访问react Context.Provider值中的另一个函数?,javascript,reactjs,Javascript,Reactjs,目前,我正在学习如何使用react上下文API。 我有一个react Provider类,在value={}中有一些状态数据和函数。如何从该值内的另一个函数访问该值内的函数 因此,子组件调用function1()。状态更改完成后,我想调用function2()并访问新状态 有可能得到这样的东西吗 类提供程序扩展组件{ 状态={ 福:“酒吧” } render(){ 返回(){ { this.setState({foo:'changed'},()=>{ //这里我想调用这个值中的下一个函数 这是函

目前,我正在学习如何使用react上下文API。 我有一个react Provider类,在
value={}
中有一些状态数据和函数。如何从该值内的另一个函数访问该值内的函数

因此,子组件调用
function1()
。状态更改完成后,我想调用
function2()
并访问新状态

有可能得到这样的东西吗

类提供程序扩展组件{
状态={
福:“酒吧”
}
render(){
返回(){
{
this.setState({foo:'changed'},()=>{
//这里我想调用这个值中的下一个函数
这是函数2()
});
},
函数2:()=>{
//状态更改后由函数1调用
console.log(this.state)
}
}}>
{this.props.children}
}
}
}
如果我试着运行它,并从子对象启动
function1()
,它会给我

TypeError:\u this2.function2()不是函数

我不明白为什么它试图访问
\u this2
变量,因为我将它定义为访问
this.function2()

难道我不可能做我想做的事吗?您可能会说,为什么
function2()
是一个额外的函数,为什么我不在
function1()的末尾添加代码。这是因为
function2()
必须是一个独立的可访问函数


有人能帮我吗?谢谢

您可以尝试这样做:-

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>
    }
  }
}
类提供程序扩展组件{
状态={
福:“酒吧”
}
一个独立的函数(){
console.log(this.state);
}
render(){
返回(){
{
this.setState({foo:'changed'},()=>{
//这里我想调用这个值中的下一个函数
这是一个独立的函数();
});
},
function2:this.an_独立的函数.bind(this)
}}>
{this.props.children}
}
}
}

将两个箭头函数
function1:()=>
更改为普通函数
函数function1(){
@naga elixir jar这是不可能的,因为函数在一个对象中。这样:
function1:function(){}
@naga elixir jar然后我会得到未处理的拒绝(TypeError):无法读取undefined的属性“setState”。非常感谢!这非常有效:)!尽管VS代码的语法高亮显示现在有点疯狂,但它仍然有效。