Javascript 反应上下文:当值*可*访问时,changeValue函数不可访问
下面代码中的按钮标题反映了正确的初始值,但尝试运行changeEvent函数会导致一个错误,表明.props.changeEvent()未定义。为什么值是可读的,而函数是不可读的?我应该改变什么来解决这个问题 测试栏: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
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>
)
}