从子组件更新父React组件

时间:2018-10-06 05:24:35

标签: reactjs react-native react-native-android react-native-ios react-context

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

1 个答案:

答案 0 :(得分:1)

您需要将回调从HomeScreen传递到ProfileScreens 此回调将在ProfileScreens中调用并触发HomeScreen状态更改:

HomeScreen中:

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

然后在ProfileScreens

...
<Button title="decrementss" onPress={()=>{ this.props.changeHomeScreen() }}/>
...