3

我正在使用 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>
    );
  }
}
4

1 回答 1

1

你需要向下传递一个回调HomeScreenProfileScreens 这个回调将在内部调用ProfileScreens并触发HomeScreen状态更改:

HomeScreen

...
<ProfileScreens changeHomeScreen={() => this.setState({...})}/>
...

然后在ProfileScreens

...
<Button title="decrementss" onPress={()=>{ this.props.changeHomeScreen() }}/>
...
于 2018-10-06T05:56:40.910 回答