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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何访问反应Context.Provider值中的另一个函数?相关的知识,希望对你有一定的参考价值。

目前,我学习了如何使用react context API。我有一个react类,在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()必须是一个独立的可访问功能。

谁能帮我?谢谢!

答案

你可以尝试做的是: -

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>
    }
  }
}

以上是关于如何访问反应Context.Provider值中的另一个函数?的主要内容,如果未能解决你的问题,请参考以下文章

如何创建一个`context.Provider` /`context.Consumer`-like结构来传递bot应用程序中的值?

包含 Context.Provider 和 Context.Consumer 的 React Context 测试组件

如何使用 Next.js 仅将一些页面包装在 Context Provider 中?

如何在params值中访问表单中的隐藏字段,但它表示行末尾

你应该用 React Context Provider 包装你的整个应用程序吗?

为啥第二个(兄弟)React Context Provider 不起作用?或者,如果上面有同级 Context Provider,为啥 React Context Provider 不起作用