【问题标题】:Redirect route does not redirect to a specified route in reactjs重定向路由不会重定向到reactjs中的指定路由
【发布时间】:2021-09-09 11:34:06
【问题描述】:

我有以下组件。

import React, { Component, useState, useEffect } from 'react';
import { Link, useParams, Redirect } from 'react-router-dom';
import { useDispatch, connect } from 'react-redux';

const SampleComponent = (props) => {
  const onOverlayHandle = () => {
    console.log('overlay clicked');
    return <Redirect to='/feedback' />
  }

    return (
    <div className='view dialog'>
      <div className='form'>
        <h3>CONTENTS</h3>
      </div>
      <div className='overlay' onClick={onOverlayHandle}></div>
    </div>
  );
}

const mapStateToProps = state => (state);

export default connect(mapStateToProps)(SampleComponent);

如您所见,divonClick 事件重叠。它触发onOverlayHandle 函数。在该函数中,我记录了一个简单的文本,然后将用户重定向到/feedback 路由。所以当我点击overlay div 时,它会记录消息,但不会将用户重定向到指定的路由。

我做错了什么,我该如何解决?

【问题讨论】:

    标签: javascript reactjs jsx


    【解决方案1】:

    如果您想在点击后重定向,您应该使用历史记录。

    import { Link, useParams, Redirect, useHistory } from 'react-router-dom';
    import { useDispatch, connect } from 'react-redux';
    
    const SampleComponent = (props) => {
      const history = useHistory();
    
      const onOverlayHandle = () => {
        console.log('overlay clicked');
        history.push("/feedback");
      }
    
        return (
        <div className='view dialog'>
          <div className='form'>
            <h3>CONTENTS</h3>
          </div>
          <div className='overlay' onClick={onOverlayHandle}></div>
        </div>
      );
    }
    

    如果你想使用重定向,你需要创建一个状态变量,然后有条件地返回重定向。

    import React, { Component, useState, useEffect } from 'react';
    import { Link, useParams, Redirect } from 'react-router-dom';
    import { useDispatch, connect } from 'react-redux';
    
    const SampleComponent = (props) => {
      const [redirect, setRedirect] = useState(false);
    
      const onOverlayHandle = () => {
        console.log('overlay clicked');
        setRedirect(true);
      }
    
      if(redirect) {
        return <Redirect to="/feedback" />
      }
    
        return (
        <div className='view dialog'>
          <div className='form'>
            <h3>CONTENTS</h3>
          </div>
          <div className='overlay' onClick={onOverlayHandle}></div>
        </div>
      );
    }
    

    【讨论】:

    • 这很好,但它不会刷新feedback 组件。使用重定向到feedback 路由时如何自动刷新。这次我用Redirect和你接近。
    • 当你重定向到一个页面时,它被渲染的页面会被刷新,这与使用链接导航到另一个页面是一样的。也许问题在于您访问反馈组件中数据的方式
    猜你喜欢
    • 2016-03-30
    • 2021-07-22
    • 2011-08-19
    • 2020-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-10
    相关资源
    最近更新 更多