我正在使用react context api在任何地方显示我的数据,并从任何地方更新我希望我的数据可以在多个屏幕上显示,并且我可以从一个以上的类进行更新,而我需要在全球范围内使用它。
当我尝试从班级个人资料屏幕进行更新时,什么也没有发生,但是可以从班级主屏幕进行更新。
如何在不使用此类数据的情况下在消费者中显示我的数据,并在全球范围内显示此数据
const Context = React.createContext("default value")
global.cart = 1;
属于上下文提供程序类的类主屏幕
class HomeScreen extends Component<Props> {
constructor(props){
super(props);
this.state={
contextData:5}}
render() {
return (
<View>
<Context.Provider value={this.state.contextData}>
<Button title="Increment" onPress={++global.cart;
this.setState({contextData:global.cart})}/>
</Context.Provider>
<ProfileScreens/>
</View>
)
}
}
我需要在许多屏幕上使用并显示的文本
class ProfileScreen extends Component<Props> {
render() {
return (
<View style={{}}>
<Context.Consumer>
{data=> <Text style={{fontSize:50}}>{data.toString()}</Text>}
</Context.Consumer>
</View>
);
}
}
另一个正在更改上下文提供者数据的类
class ProfileScreens extends Component<Props> {
constructor(props){
super(props);
this.state={contextData:5}}
render() {
return (
<View >
<Context.Provider value={this.state.contextData}>
<ProfileScreen/>
<Button title="decrementss" onPress={()=>{ ++global.cart;
this.setState({contextData:global.cart})}}/>
</Context.Provider>
</View>
);
}
}
答案 0 :(得分:1)
您需要将回调从HomeScreen
传递到ProfileScreens
此回调将在ProfileScreens
中调用并触发HomeScreen
状态更改:
在HomeScreen
中:
...
<ProfileScreens changeHomeScreen={() => this.setState({...})}/>
...
然后在ProfileScreens
中
...
<Button title="decrementss" onPress={()=>{ this.props.changeHomeScreen() }}/>
...