反应导航:正确在屏幕之间传递状态

问题描述 投票:0回答:1

我正在尝试在屏幕之间传递状态。我遵循了Passing parameters to routes我可以从主屏幕转到详细信息屏幕,但是当我尝试从详细屏幕到主屏幕pass state时,状态无法通过。

我在主屏幕中具有同意按钮,当我单击pass back state并导航到详细信息屏幕时,check on the button(到目前为止很好。)>

但是,如果我[详细信息]屏幕上的按钮button is checked选中了。

uncheck

这是我的主屏幕代码:

and navigate back to Home screen the state is still

这是我的详细屏幕代码:

Try the code from expo

我正在尝试在屏幕之间传递状态。我按照传递参数到路由的说明进行操作,我可以将状态从主屏幕传递到详细信息屏幕,但是当我尝试将状态传递回... ...>

react-native react-navigation
1个回答
0
投票

而不是放入构造函数,请尝试将其放入componentDidMount()中。 PFB从expo snaack更新的代码ive。并且我使用了navigation.push来代替navigation.navigate,因为coz push总是在导航器堆栈的顶部进行隐式推送。,

const imageOn = require("./iconCheck.png");
const imageOff = require("./emptyCheck.png");

class HomeScreen extends React.Component {
    constructor(props) {
    super(props);
    this.state = {
      agreeState: this.props.navigation.getParam('agreeServiceFromChild'),
    };
  }

  checkStateImage(){
    if(this.state.agreeState === undefined){this.setState({agreeState:false},()=>console.log(this.state.agreeState,'agreeState'))}
    if(this.state.agreeState === true){return(imageOn)}
    if(this.state.agreeState === false){return(imageOff)}
  }
  render() {
        const { navigation } = this.props;

    return (
      <View style={{ flex: 1, alignItems: 'center', justifyContent: 'center' }}>
        <Text>Home Screen</Text>
        <CustomCheckBox
          onPress={() => this.setState({agreeState: !this.state.agreeState}, ()=> console.log (this.state.agreeState,'agreeState'))}
          onPressButton={() =>
            this.props.navigation.navigate('Details', {
              agreeServiceFromParent:this.state.agreeState,
            })
          }
          source={this.checkStateImage()}
          text='agree'
          buttonText='go to DetailScreen'

        />
      </View>
    );
  }
}
© www.soinside.com 2019 - 2024. All rights reserved.