Javascript 反应上下文:当值*可*访问时,changeValue函数不可访问

Javascript 反应上下文:当值*可*访问时,changeValue函数不可访问,javascript,reactjs,react-native,react-context,Javascript,Reactjs,React Native,React Context,下面代码中的按钮标题反映了正确的初始值,但尝试运行changeEvent函数会导致一个错误,表明.props.changeEvent()未定义。为什么值是可读的,而函数是不可读的?我应该改变什么来解决这个问题 测试栏: export default class TestBar extends React.Component { constructor(props) { super(props); this.state = { } } componentDi

下面代码中的按钮标题反映了正确的初始值,但尝试运行changeEvent函数会导致一个错误,表明.props.changeEvent()未定义。为什么值是可读的,而函数是不可读的?我应该改变什么来解决这个问题

测试栏:

export default class TestBar extends React.Component {


  constructor(props) {
    super(props);
    this.state = {
    }
  }
  componentDidMount() {
  }

  render() {
    let context = {
      eventPath: this.props.eventPath,
      changeEvent: !!this.props.changeEvent
    }
    console.log("context:", context);
    return (
      <View>
            <Button title={this.props.eventPath} onPress={() => {
              this.props.changeEvent("hello");
              console.log(eventPath);
            }}/>
      </View>
    )
  }
}
导出默认类TestBar扩展React.Component{
建造师(道具){
超级(道具);
此.state={
}
}
componentDidMount(){
}
render(){
让上下文={
eventPath:this.props.eventPath,
changeEvent:!!this.props.changeEvent
}
log(“上下文:”,上下文);
返回(
{
this.props.changevent(“hello”);
日志(eventPath);
}}/>
)
}
}
反应上下文提供程序/使用者定义:

import React, { Component } from "react";
const { Provider, Consumer } = React.createContext();

class EventContextProvider extends Component {
  state = {
    value: { eventPath: "None", changeEvent: this.changeEvent }
  };

  changeEvent = () => {
    this.setState({
      value: { eventPath: "test", changeEvent: this.changeEvent }
    });
  };

  render() {
    return (
      <Provider
        value={this.state.value}
      >
        {this.props.children}
      </Provider>
    );
  }
}

export { EventContextProvider, Consumer as EventContextConsumer };
import React,{Component}来自“React”;
const{Provider,Consumer}=React.createContext();
类EventContextProvider扩展组件{
状态={
值:{eventPath:“无”,changeEvent:this.changeEvent}
};
changeEvent=()=>{
这是我的国家({
值:{eventPath:“test”,changeEvent:this.changeEvent}
});
};
render(){
返回(
{this.props.children}
);
}
}
导出{EventContextProvider,消费者为EventContextConsumer};
摘录自我正在使用提供商和消费者的应用程序页面(我计划一旦成功,在树的更深处添加另一个消费者)

renderContent=()=>(
{({eventPath,changeEvent})=>
}
);
render(){
返回(
{
}
)
}

changeEvent
不应属于
状态
。您可以直接在提供程序中使用该函数。有什么理由这样使用吗?为什么要在其内部递归引用
changeEvent
。使用
changeEvent
function@ShubhamVerma这就解决了问题,谢谢。
changeEvent
不应该是
状态的一部分。您可以直接在提供程序中使用该函数。有什么理由这样使用吗?为什么要在其内部递归引用
changeEvent
。使用
changeEvent
function@ShubhamVerma这就解决了,谢谢。
renderContent = () => (
      <EventContextConsumer>
        {({ eventPath, changeEvent }) =>
          <TestBar eventPath={eventPath} changeEvent={changeEvent} />
        }
      </EventContextConsumer>
  );

  render() {
    return (
      <Fragment>
          <EventContextProvider>
            
                <View>
                  {
                    <View style={{
                      elevation: 0,
                      height: 1,
                      width: "100%"
                    }}>
                      <BottomSheet
                        snapPoints={["80%", 65]}
                        style={{

                        }}
                        renderContent={this.renderContent}
                        borderRadius={10}
                        initialSnap={1}
                        ref={this.sheetRef}
                        enabledGestureInteraction={true}
                      />
                    </View>}
          </EventContextProvider>
)
}