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

时间:2019-04-14 08:13:15

标签: javascript reactjs

此刻,我学习了如何使用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()必须是一个独立的可访问函数。

有人可以帮助我吗?谢谢!

1 个答案:

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