Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将用户重定向到React中的其他路径_Javascript_Reactjs_Firebase_Firebase Realtime Database - Fatal编程技术网

Javascript 将用户重定向到React中的其他路径

Javascript 将用户重定向到React中的其他路径,javascript,reactjs,firebase,firebase-realtime-database,Javascript,Reactjs,Firebase,Firebase Realtime Database,我正在构建一个web应用程序。用户可以从Firebase中读取有关对象的一些信息。问题是,用户也可以使用Android应用程序登录,如果Firebase上的属性发生更改,则需要将其从web应用程序的当前视图中踢出。我知道怎么做这件事。代码如下: var AssignedWordRef = firebase.database().ref('Users').child(currentUser.uid).child('assignedWork'); AssignedWordRef.on('value'

我正在构建一个web应用程序。用户可以从Firebase中读取有关对象的一些信息。问题是,用户也可以使用Android应用程序登录,如果Firebase上的属性发生更改,则需要将其从web应用程序的当前视图中踢出。我知道怎么做这件事。代码如下:

var AssignedWordRef = firebase.database().ref('Users').child(currentUser.uid).child('assignedWork');
AssignedWordRef.on('value', snapshot => {
    var assignmentId = snapshot.val();
    if (assignmentId === null) {
        console.log('Redirect right here mate');
    }
});
这是有效的。这是控制台日志记录,一切都很好。但问题是我需要将用户重定向到不同的路径。到目前为止,我使用了一个
窗口。location
,但这不是一个好主意。以下是我的
路线

<Switch>
    <Route exact path="/assignments" render={
        () => (firebase.auth().currentUser === null ?
            <Redirect to='/'/> : this.state.assignedWord === undefined ?
                <AssignmentsComponent/> :
                <Redirect to={'/assignment/' + this.state.assignedWord}/>)
    }/>

    <Route exact path='/assignment/:id' render={
        props => (
            firebase.auth().currentUser === null ?
                <Redirect to='/'/> : <CheckIfHasCurrentTasksComponent {...props}/>)
    }/>

    <Route exact path='/userPanel' render={
        () => (firebase.auth().currentUser === null ?
            <Redirect to='/'/> : <UserPannelComponent/>)
    }/>

    <Route exact path="/" component={HomeComponent}/>
</Switch>

(firebase.auth().currentUser==null?
:this.state.assignedWord==未定义?
:
)
}/>
(
firebase.auth().currentUser==null?
: )
}/>
(firebase.auth().currentUser==null?
: )
}/>
我尝试返回
控制台.log所在的
,但没有成功


返回
也没有帮助。我猜我必须把它放在
路线上,但我不知道怎么放。

你可以试试
这个.props.history.push('/')而不是使用


希望这能奏效

将push与this.props.history一起使用,或者只使用重定向。这是(请记住使用此.setState)执行新渲染的示例代码:

class MyComponent extends React.Component {
  state = {
    redirect: false
  }

  handleSubmit () {
    axios.post(/**/)
      .then(() => this.setState({ redirect: true }));
  }

  render () {
    const { redirect } = this.state;

     if (redirect) {
       return <Redirect to='/somewhere'/>;
     }

     return <RenderYourForm/>;
}
类MyComponent扩展了React.Component{ 状态={ 重定向:false } handleSubmit(){ axios.post(/**/) .then(()=>this.setState({redirect:true})); } 渲染(){ const{redirect}=this.state; 如果(重定向){ 返回; } 返回; }
可能重复您尝试的
此.props.history.push(位置)
?您可以使用push或执行类似于此答案中的重定向@PaoloDell'Aguzzo太完美了!谢谢!是否将其添加为答案?您可以使用push或执行类似于此答案中的重定向