向后导航时的本机重新运行功能

时间:2018-09-04 19:18:36

标签: javascript reactjs react-native

我正在使用react-navigation在屏幕之间进行导航,现在在我的“ cases.js”中,我有一个fetch方法,当用户单击它时,它会从API获取案例,然后将带有点击案例的页面加载到另一页面要么接受,要么拒绝。

如果用户接受该案例,则无论哪种方式,都将用户重定向到“ cases.js”页面。我不再需要该案例在“ cases.js”页面列表中可用。

这是我的cases.js文件

export default class PendingCases extends Component {

  constructor(props) {

    super(props);

    this.state = { cases : [], user : '', refreshing : false }

  }

  componentDidMount = async () => {

    await this._getUser();

    await this._getCases();

  }

  _getUser = async () => {

    let user = await AsyncStorage.getItem('user');

    await this.setState({ user : JSON.parse(user) })

  }

  _getCases = async () => {

    try {

      await this.setState({ refreshing : true })

      let pendingCases = await fetch('http://192.168.1.101:1337/user/cases?status=pending&userType=patient&id=' + this.state.user.id);

      let response = await pendingCases.json();

      await this.setState({ cases : response.cases });

      await this.setState({ refreshing : false })

    } catch (err) {

      console.log(err);

    }

  }

  render() {

    let casesArray = this.state.cases.map((singleCase, index) => {
      return (
        <View key={ index }>
          <TouchableOpacity onPress={ () => this.props.navigation.navigate('SelectedCaseDetails') } style={ styles.caseButton }>
            <View>
              <View style={{ marginBottom: 10, marginTop: 5 }}>
                <LinearTextGradient locations={[0, 1]} start={{x: 0, y: 0}} end={{x: 1, y: 0}} colors={['#a4d294', '#3ac6f3']} style={{ fontWeight: 'bold' }}>
                  {singleCase.doctor.name}
                </LinearTextGradient>
                <Text style={{ position: 'absolute', right: 0, fontWeight: '600', color: 'black'}}> 00231 </Text>
              </View>
              <View style={{ marginBottom: 10 }}>
                <Text> {singleCase.additionalInformation} </Text>
              </View>
              <View style={{ marginBottom: 10, flex : 1, flexDirection: 'row'}}>
              <Image style={ styles.statusImage } source={require('../images/status.png')} />
                <Text style={{ marginRight : 30, color : 'rgba(0, 0, 0, .8)', flex : 8}}>
                 Status <Text style={{ color : 'rgb(240, 151, 166)', marginLeft : 60 }}> {singleCase.status} </Text> </Text>
                <Text style={{ position: 'absolute', right: 0, fontWeight: '300', color: 'grey'}}> { parsedDate } </Text>
              </View>
            </View>
          </TouchableOpacity>

        </View>
      )
    });

    return (
      <View>
        { casesArray }
      </View>
    )

  }

}

当我从一级深度页面重定向用户时,如何重新运行this._getCases()函数?

我将用户重定向到导航至其他任何屏幕的方式 this.props.navigation.navigate('CasesScreen')

1 个答案:

答案 0 :(得分:1)

如果已经安装了组件,则可以使用3 2 1 1 listeners检查组件是否聚焦。

您需要

  

didFocus :屏幕聚焦(如果存在过渡,则过渡完成)

react-navigation's

并在组件卸载后将其删除。

componentDidMount () {
    this._getUser();
    this._onFocusListener = this.props.navigation.addListener('didFocus', (payload) => {
      this._getCases();
    });
}