如何在异步功能内添加导航功能?

时间:2020-02-05 11:26:36

标签: react-native

我创建了一个异步函数,每当按下该图标时,该函数都会从api中获取数据并变为红色,但是现在我想在like函数完成后立即导航到另一个页面,但是无法执行。 请帮助

下面是我尝试过的方式,

onButtonPress = async(item) => {
    console.log(item)
    console.log(this.state.buttonColor,'hello')
  if(!this.state.likedItemIds.includes(item._id)){
    try {
      const response = await fetch("some url"+item._id);
      const resJson = await response.text();
      this.setState(prevState => ({
        likedItemIds: [...prevState.likedItemIds, item._id]
      }))

      console.log(resJson)
      if(this.state.buttonColor!=='white'){
        this.props.navigation.navigate('Wishlist')
      }
    }


    catch (error) {
      console.error(error);
    }
 }

请告诉我是否需要其他任何帮助。

1 个答案:

答案 0 :(得分:0)

setState是一个异步函数,允许您将回调作为第二个参数传递。因此,您可以在该回调中进行导航,该回调将在setState完成后触发。这意味着您将在完成类似操作后离开页面。

您可以执行以下操作:

onButtonPress = async(item) => {
    console.log(item)
    console.log(this.state.buttonColor,'hello')
  if(!this.state.likedItemIds.includes(item._id)){
    try {
      const response = await fetch("some url"+item._id);
      const resJson = await response.text();
      this.setState(prevState => ({
        likedItemIds: [...prevState.likedItemIds, item._id]
      }), () => { 
          // Do whatever else you need to do here (validation, etc.)
          this.props.navigation.navigate('Wishlist') 
      })
    }


    catch (error) {
      console.error(error);
    }
 }