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

最佳答案

如果已经安装了组件,则可以使用react-navigation's listeners检查组件是否聚焦。

你需要


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


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


卸载后,将其删除。

componentWillUnmount () {
      this._onFocusListener.remove()
}

关于javascript - 向后导航时的 native 重新运行功能,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/52172714/

10-16 21:06