【问题标题】:On redirection external JS is not working in react-router-dom在重定向外部 JS 在 react-router-dom 中不起作用
【发布时间】:2018-09-04 09:23:00
【问题描述】:

我正在使用 react.js 和 Node.js 创建一个应用程序,并使用 react-router-dom 4 进行前端路由。

我正在使用 jquery 进行 AJAX 请求。有用户登录api,当用户使用凭据登录然后使用this.props.history.push('/dashboard')重定向到仪表板页面

UserLoginAPI(){
        let formData = this.state.form;
        $.ajax({ 
            url:BASEURL+CONSTANT.login,
            type:'POST',
            data:formData,
            success:(data)=>{  
                let form = this.state.form;
                this.setState({popUpMessage:data.data });
                this.setState({showPopUp:true});
                this.props.history.push('/dashboard')
            },
            error:(err)=>{ 
                this.setState({popUpMessage:err.responseJSON.message || 'Some Undefined Error Occured.'});
                this.setState({showPopUp:true}) ;
                console.log(err);
            }
        });
    }

成功登录后,用户重定向到仪表板页面,但其外部纯 JavaScript 无法正常工作。在 Page 中渲染可能存在一些问题。我陷入了困境。 下面是路由配置

<Router>
        <div className="App"> 
          <Header />
          <Slider />
          <Switch>
                <Route exact path='/' component={Home} />
                <Route  path='/register' component={Register} />
                <Route  path='/login' component={Login} />
                <Route  path='/dashboard' component={Dashboard} />
          </Switch>

        </div>
      </Router>

我无法找出问题所在。请帮忙!

【问题讨论】:

    标签: reactjs routing react-router-dom


    【解决方案1】:

    你如何导入你的 UserLoginAPI ?也许您的示例代码还不够。如果函数在类范围内,则必须使用箭头函数来绑定类上下文,如果 API 的方法位于外部,则必须从方法中返回 Promise() 并在组件中解析结果。

    // In-class method
    UserLoginAPI= () => {
            let formData = this.state.form;
            $.ajax({ 
                url:BASEURL+CONSTANT.login,
                type:'POST',
                data:formData,
                success:(data)=>{  
                    let form = this.state.form;
                    this.setState({popUpMessage:data.data });
                    this.setState({showPopUp:true});
                    this.props.history.push('/dashboard')
                },
                error:(err)=>{ 
                    this.setState({popUpMessage:err.responseJSON.message || 'Some Undefined Error Occured.'});
                    this.setState({showPopUp:true}) ;
                    console.log(err);
                }
            });
        }

    // Return promise
    
    MyFunction(myParams) {
           return $.ajax({
                url: myParams.url,
                type: "POST",
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                data: JSON.stringify(expenseSet.toJSON())
            });
    }

    【讨论】:

    • UserLoginAPI() 函数在类范围内,我从 onSubmit 函数调用它。
    • API 调用和响应工作正常。仅在重定向到仪表板后,纯 javascript 不起作用
    • “普通 javascript”和“不工作”是什么意思?从仪表板调用 UserLoginAPI 不起作用?
    • Plain Javascript 是指我为 onclick 事件、滑块脚本等编写的自定义 javascript。不工作意味着那些前端脚本在通过 this.props.history.push('/dashboard') 重定向时不工作
    • 好吧,这可能是一个绑定问题。尝试将函数转换为箭头函数以维护上下文
    猜你喜欢
    • 2021-07-24
    • 2021-07-27
    • 2021-02-11
    • 2018-05-21
    • 2017-10-05
    • 2018-02-04
    • 2020-04-23
    • 2018-04-05
    • 2018-10-14
    相关资源
    最近更新 更多