Reactjs React本机深度链接仅在第二次单击时有效

Reactjs React本机深度链接仅在第二次单击时有效,reactjs,react-native,react-navigation,deep-linking,Reactjs,React Native,React Navigation,Deep Linking,问题:我试图使用深度链接引导用户从电子邮件中重置密码页面,但第一次单击链接会将我带到应用程序的上一个状态,只有第二次单击链接才会将我带到重置密码页面 问题更新:当前的行为是,我可以在第一次单击时转到正确的屏幕,但是,来自上一个应用程序状态的屏幕仍然是我看到的第一个屏幕,并且在转到正确的屏幕之前,它会停留2秒钟 这是我的密码: class NavigationWrapper extends React.Component { constructor(props) { super(pro

问题:我试图使用深度链接引导用户从电子邮件中重置密码页面,但第一次单击链接会将我带到应用程序的上一个状态,只有第二次单击链接才会将我带到重置密码页面

问题更新:当前的行为是,我可以在第一次单击时转到正确的屏幕,但是,来自上一个应用程序状态的屏幕仍然是我看到的第一个屏幕,并且在转到正确的屏幕之前,它会停留2秒钟

这是我的密码:

class NavigationWrapper extends React.Component {
  constructor(props) {
    super(props)
    this.state = {
      token: null,
      route: null
    }
    this.handleDeepLink = this.handleDeepLink.bind(this)
    this.navigatorRef = navigatorRef
  }

  componentDidMount() {
    Linking.getInitialURL().then(url => {
      const { route, token } = unpackLink(url)
      this.setState({ route, token })
    })
    Linking.addEventListener('url', this.handleDeepLink)
  }

  componentDidUpdate() {
    if (!this.props.loggedIn && this.state.token) {
      const token = this.state.token
      this.setState(
        { token: null },
        () => this.props.tokenLogin(token)
      )
    }
  }

  componentWillUnmount() {
    Linking.removeEventListener('url', this.handleDeepLink)
  }

  handleDeepLink(e) {
    const { route, token } = unpackLink(e.url)
    this.setState({ route, token })
  }

  render() {
    return <NavigationContainer ref={this.navigatorRef}><RootStack /></NavigationContainer>
  }
}

以及处理该请求的传奇故事:

export function* sendEmail() {
  try {
    yield takeEvery(
      authTypes.PASSWORD_RESET_EMAIL.REQUEST,
      resetPassword
    )
  } catch (err) {
    console.warn('error', err)
  }
}

function* resetPassword(action) {
  yield makeApiRequest(
    authTypes.PASSWORD_RESET_EMAIL,
    `forgot-password`,
    '',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({ email: action.username })
    },
    false,
    { email: action.username }
  )
}

我看不到你在这里导航到任何关于接收深度链接的页面。我很惊讶你竟然可以重新设置密码页面。还有,你为什么不使用链接道具来处理深层链接,而不是手动添加侦听器?@satya164谢谢你的评论!该应用程序设置为,当第一次登录状态更改时,它会将用户带到“更改密码”页面。我尝试过使用钩子和链接道具,并在链接中使用route参数进行导航,但行为仍然是一样的-第一次单击会将我带到上一个应用程序状态,第二次单击会将我带到正确的屏幕…真的对此感到困惑。你能将代码发布到你带用户更改密码页面的位置吗?是的,更新了上面的代码。谢谢你看!如何设置firstLogin状态?发布组件的完整代码
case authTypes.PASSWORD_RESET_EMAIL.SUCCESS:
      return {
        ...initialState,
        passwordChanged: false,
        emailSent: true,
        firstLogin: true,
      }
export function* sendEmail() {
  try {
    yield takeEvery(
      authTypes.PASSWORD_RESET_EMAIL.REQUEST,
      resetPassword
    )
  } catch (err) {
    console.warn('error', err)
  }
}

function* resetPassword(action) {
  yield makeApiRequest(
    authTypes.PASSWORD_RESET_EMAIL,
    `forgot-password`,
    '',
    {
      method: 'POST',
      headers: {
        'Content-Type': 'application/json',
      },
      body: JSON.stringify({ email: action.username })
    },
    false,
    { email: action.username }
  )
}